Grammalecte  Check-in [90178af717]

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

Overview
Comment:[fr] faux positifs et ajustements
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr
Files: files | file ages | folders
SHA3-256: 90178af717d3e576b3a8d378753631516abad91d90c3a40d799a7da5af389b8e
User & Date: olr 2020-05-19 20:11:32
Context
2020-05-20
20:45
[fr] ajustements check-in: c4e5226bbe user: olr tags: fr, trunk
2020-05-19
20:11
[fr] faux positifs et ajustements check-in: 90178af717 user: olr tags: fr, trunk
07:44
[fr] ajustements check-in: 57c51c90df user: olr tags: fr, trunk
Changes

Changes to gc_lang/fr/rules.grx.

1937
1938
1939
1940
1941
1942
1943
1944



1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
















1979
1980
1981
1982
1983
1984
1985
....
1986
1987
1988
1989
1990
1991
1992






1993
1994
1995
1996
1997
1998
1999
.....
11506
11507
11508
11509
11510
11511
11512









11513
11514
11515
11516
11517
11518
11519
.....
13200
13201
13202
13203
13204
13205
13206
13207
13208
13209
13210
13211
13212
13213
13214
.....
13698
13699
13700
13701
13702
13703
13704

13705
13706
13707
13708
13709
13710
13711
.....
14272
14273
14274
14275
14276
14277
14278
14279
14280
14281


14282
14283
14284
14285
14286
14287
14288
.....
15138
15139
15140
15141
15142
15143
15144

15145
15146
15147
15148
15149
15150
15151
.....
15339
15340
15341
15342
15343
15344
15345
15346
15347
15348
15349
15350
15351
15352
15353
.....
15435
15436
15437
15438
15439
15440
15441
15442
15443
15444
15445
15446
15447
15448
15449
.....
15459
15460
15461
15462
15463
15464
15465

15466
15467
15468
15469
15470
15471
15472
.....
16023
16024
16025
16026
16027
16028
16029
16030
16031
16032
16033
16034
16035
16036
16037
16038
16039
16040
16041
16042
16043
16044
.....
16199
16200
16201
16202
16203
16204
16205
16206
16207


16208
16209
16210
16211
16212
16213
16214
16215
16216
16217
16218
16219
16220


16221
16222
16223
16224
16225
16226
16227
16228
16229
.....
16366
16367
16368
16369
16370
16371
16372

16373
16374
16375
16376
16377
16378
16379
.....
16692
16693
16694
16695
16696
16697
16698
16699
16700
16701
16702
16703
16704
16705
16706
.....
18083
18084
18085
18086
18087
18088
18089
18090

18091
18092
18093
18094
18095
18096
18097
18098
18099
18100
18101
18102
18103
18104
18105
18106
18107
.....
18898
18899
18900
18901
18902
18903
18904
18905
18906
18907
18908
18909



















18910





18911
18912
18913
18914
18915
18916
18917
.....
19218
19219
19220
19221
19222
19223
19224

19225
19226
19227
19228
19229
19230
19231
.....
19260
19261
19262
19263
19264
19265
19266
19267
19268
19269
19270
19271
19272
19273
19274
19275
19276
19277
19278
19279
19280
19281
.....
19322
19323
19324
19325
19326
19327
19328
19329
19330
19331
19332
19333
19334
19335
19336
19337
19338
19339
19340
19341
19342
19343
.....
19363
19364
19365
19366
19367
19368
19369
19370
19371
19372
19373
19374
19375
19376
19377
19378
19379
19380
19381
19382
19383
19384
19385
19386
19387
.....
19519
19520
19521
19522
19523
19524
19525
19526
19527
19528
19529
19530
19531
19532
19533
19534
19535
19536
19537
19538
19539
19540
.....
19542
19543
19544
19545
19546
19547
19548
19549
19550
19551
19552
19553
19554
19555
19556
19557
19558
19559
19560
19561
19562
19563
.....
19633
19634
19635
19636
19637
19638
19639
19640
19641
19642
19643
19644
19645
19646
19647
19648
19649
19650
19651
19652
19653
19654
.....
19666
19667
19668
19669
19670
19671
19672
19673
19674
19675
19676
19677
19678
19679
19680
19681
19682
19683
19684
19685
19686
19687
19688
19689
.....
19707
19708
19709
19710
19711
19712
19713
19714
19715
19716
19717
19718
19719
19720
19721
19722
19723
19724
19725
19726
19727
19728
.....
19744
19745
19746
19747
19748
19749
19750
19751
19752
19753
19754
19755
19756
19757
19758
19759
19760
19761
19762
19763
19764
19765
19766
19767
.....
19810
19811
19812
19813
19814
19815
19816
19817
19818
19819
19820
19821
19822
19823
19824
19825
19826
19827
19828
19829
19830
19831
19832
19833
.....
19882
19883
19884
19885
19886
19887
19888
19889
19890
19891
19892
19893
19894
19895
19896
19897
19898
19899
19900
19901
19902
19903
19904
19905
19906
19907
19908
19909
19910
19911
.....
19975
19976
19977
19978
19979
19980
19981
19982
19983
19984
19985
19986
19987
19988
19989
19990
19991
19992
19993
19994
.....
20198
20199
20200
20201
20202
20203
20204
20205
20206
20207
20208
20209
20210
20211
20212
20213
20214
20215
20216
20217
20218
20219
20220
20221
20222
20223
20224
20225
20226
20227
20228
20229
20230
20231
20232
20233
20234
20235
20236
20237
20238
20239
20240
20241
20242
20243
20244
20245
20246
20247
20248
.....
22724
22725
22726
22727
22728
22729
22730
22731
22732
22733
22734
22735
22736
22737
22738
22739
22740
22741
22742
22743
22744
22745
22746
22747
22748
22749
22750
.....
24102
24103
24104
24105
24106
24107
24108
24109
24110
24111
24112
24113
24114
24115
24116
24117
24118
24119
24120






















24121
24122
24123
24124
24125
24126
24127
24128
24129
24130
24131
24132
24133
24134
.....
24140
24141
24142
24143
24144
24145
24146
24147
24148
24149
24150
24151









24152
24153
24154
24155
24156
24157
24158
.....
27537
27538
27539
27540
27541
27542
27543
27544
27545
27546
27547
27548
27549
27550
27551
27552
27553
27554
27555
    environ  [$:B|*NUM]
        <<- not value(<1, "|l’|un|cet|quel|") =>> exclude(\1, ":N")

    grave
        <<- morph(<1, ":D") =>> (\1, ":W")


__da_prépositions__



    dans
        <<- not morph(<1, ":D.*:p|>[a-z]+ième/") =>> select(\1, ":R")

    passé  [<end>|,|$:R]
        <<- =>> exclude(\1, ":G")

    y compris
        <<- not value(<1, "|n’|j’|tu|t’|m’|s’|") ~>> ␣
        <<- __also__ =>> define(\1, ":G:R")


__da_puis__
    puis
        <<- not value(<1, "|je|ne|n’|le|la|l’|les|lui|nous|vous|leur|") =>> =exclude(\1, ":V")


__da_SA__
    SA
        <<- morph(<1, ":D") =>> exclude(\1, ":D")


__da_mots_grammaticaaux__
    [le|ce|cet|mon|ton|son|quel|quelque|notre|votre|un|leur|ledit|dudit|des|les|quelques|quel|quelle|quels|quelles]  [son|ton]
        <<- =>> exclude(\2, ":D")

    [la|ma|ta|sa|les|des|nos|vos|leur|leurs|quel|quelle|quels|quelles] personne
        <<- =>> select(\2, ":N")

    [le|la|l’|les|du|ces|des|mes|tes|ses|nos|vos|leurs|quelques|quels|quelles] même
        <<- =>> select(\2, ":A")

    [le|l’|mon|notre|votre|leur|mes|tes|ses|nos|vos|leurs|quel|quels|quelle|quelles] point
        <<- =>> select(\2, ":N")


















__da_autre_chose_quelque_chose__
    quelque chose
        <<- =>> define(\2, ":N:m:s")

    autre chose
        <<- not morph(<1, ">entre/|:D") ~>> ␣
................................................................................
        <<- =>> define(\1, ":G")


__da_groupe_nominal__
    aucun  @:[NA].*:[me]
        <<- =>> exclude(\2, ":V")







    bac + ~^\d\d?$
        <<- ~>> ␣
        <<- =>> define(\1, ":N:e:i")

    [de|d’]  @:¬:[YD]
        <<- =>> exclude(\2, ":(?:[123][sp]|P)")

................................................................................
# ensemble
__sgpl_ensemble__
    [toutes|tous] ensembles
        <<- /sgpl/ -2>> ensemble                                    && Ici, “ensemble” est vraisemblablement un adverbe, donc invariable.|https://fr.wiktionary.org/wiki/ensemble

TEST: Allons-y toutes {{ensembles}}                             ->> ensemble











# en rangs serrés
__sgpl_en_rangs_serrés__
    en rang serré
        <<- /sgpl/ ->> en rangs serrés|en ordre serré               && Au pluriel, car il y a plusieurs rangs. Vous pouvez aussi utiliser l’expression “en ordre serré”.

TEST: ils défilèrent {{en rang serré}}
................................................................................
    plus d’ une fois
    plus d’ une fois par [seconde|minute|heure|jour|semaine|mois|trimestre|semestre|an|année|décennie|siècle|millénaire]
    pour la [première|seconde|dernière|~ième$] fois
    pour la [première|seconde|dernière|~ième$] fois [de|d’] [ma|ta|sa|notre|votre|leur] ?misérable¿ vie ?[misérable|insignifiante|palpitante]¿
    pour la [première|seconde|dernière|~ième$] fois [de|d’] [mon|ton|son|notre|votre|leur] ?[misérable|insignifiante|palpitante]¿ existence ?[misérable|insignifiante|palpitante]¿
    pour la [seconde|dernière|~ième$] fois [de|d’] suite
    pour [trois|3] fois rien
    pour une fois
    quelquefois
    quelques fois
    sans y [réfléchir|songer|penser] à [deux|2] fois
    souventes fois
    toutefois
    tant de fois
        <<- ~>> *
................................................................................
    dans le cas contraire
    dans [ce|ces] [cas-là|cas-ci]
    dans ce cas [précis|particulier]
    dans ces cas [précis|particuliers]
    dans l’ [idéal|immédiat]
    dans la mesure du possible
    dans la dernière ligne droite

    dans leur globalité
    dans leur grande majorité
    dans tout [cela|ça|ceci]
    dans un cas comme dans l’autre
    dans une [certaine|large|moindre] mesure
    dans une mauvaise passe
    d’ abord
................................................................................
    sous haute [surveillance|tension]
    stricto sensu
    sur [mon|ton|son|notre|votre|leur] [trente-et-un|31]
    sur [mon|ton|son|notre|votre|leur] trente et un
    sur ce ,
    sur ce plan-là
    sur la défensive
    sur le fil du rasoir
    sur la forme comme sur le fond
    sur la même longueur d’ onde


    sur le plan [local|cantonal|départemental|régional|national|européen|américain|africaine|asiatique|continental|international|planétaire|galactique|universel]
    sur le pied [de|d’] guerre
    sur le qui-vive
    surtout
    s’ il [te|vous] [plaît|plait]
    tant bien que mal
    tant s’ en faut
................................................................................
    >force d’ assaut
    >force [de|d’] caractère
    >fosse à [merde|>ordure|purin]
    >fosse aux lions
    >fou à lier
    [>fourgon|>fourgonnette] [de|d’] location
    >frayeur [de|d’] tous les diables

    >frousse [de|d’] tous les diables
    >fuite en avant
    >fusil à [plomb|pompe]
    >garde à vue
    >garde du corps
    gaz à >effet [de|d’] serre
    >genou à terre
................................................................................
    >sac [de|d’] [couchage|sport|voyage]
    >salaire à vie
    >salle à manger
    >salle [de|d’] [attente|>bain|bal|conférence|lecture|séjour|vente]
    >salon [de|d’] coiffure
    sas [de|d’] [confinement|décompression|décontamination|désinfection|livraison|protection|secours|sécurité]
    >sclérose en plaques
    [secret+s] défense
    >seconde d’ arc
    >sel [de|d’] [aluminium|ammonium|mer]
    >serpent à sonnette
    >service d’ ordre
    >seuil [de|d’] tolérance
    >seuil [de|d’] tolérance à la douleur
    >silo à [>grains|blé]
................................................................................
    >con comme la lune
    >con comme un balai
    >con comme une valise sans >poignée
    >corvéable à merci
    >court sur pattes
    [cousu+ses] [main]
    [cousu+ses] [de|d’] fil blanc
    [daté+ses] du [1er|1ᵉʳ|1|01|2|02|3|03|4|04|5|05|6|06|7|07|8|08|9|09|10|11|12|13|14|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31] {mois} ?[prochain|passé|dernier|~^[0-9]{2,5}$]¿
    >digne [de|d’] [confiance|foi]
    >digne [de|d’] ce nom
    >droit comme un i
    >fort en gueule
    >fou [de|d’] rage ?[contenue|retenue]¿
    >élu à la majarité absolue
    >haut comme [trois|3] pommes
................................................................................
    >noir comme une nuit sans lune
    >pure comme [le|du] cristal
    >rapide à la comprenette
    [réglé+ses] comme du papier à musique
    [remis+es] à plat
    >sain [de|d’] [corps|esprit]
    >sain [de|d’] [corps|esprit] et [de|d’] [corps|esprit]

    >sourd comme un pot
    >sujet à interprétation
    >sujet à interprétations diverses
    >têtu comme une [bourrique|mule]
    >têtu comme un [âne|bourriquot|mulet]
    [tiré+ses] à [quatre|4] épingles
        <<- ~2:0>> *
................................................................................
    à [mes|tes|ses|nos|vos|leurs] [regards|yeux]  [<end>|,|)]
        <<- ~1:-2>> *

    à la dernière [minute|seconde]  @¬:A.*:[fe]:[si]
    à la dernière [minute|seconde]  [<end>|,|)]
        <<- ~1:-2>> *

    à la longue     @:¬:N.*:[fe]:[si]
    à la longue     [<end>|,|)]
    à la dérive     @:¬:A.*:[fe]:[si]
    à la dérive     [<end>|,|)]
    à l’ époque     @:¬:A.*:[fe]:[si]
    à l’ époque     [<end>|,|)]
    à l’ identique  @:¬:N.*:[si]
    à l’ identique  [<end>|,|)]
        <<- ~1:-2>> *

    à répétition  @¬:A.*:[fe]:[si]
    à répétition  [<end>|,|)]
        <<- ~1:2>> *

    au bout d’ un moment  @:¬:A.*:[me]:[si]
................................................................................
    pour cette raison [<end>|,|)]
        <<- ~1:3>> *

    pour de bon  @:¬:[NA].*:m:s
    pour de bon  [<end>|,|)]
        <<- ~1:3>> *

    pour partie  @:¬:A.*:f:s
    pour partie  [<end>|,|)]


        <<- ~1:2>> *

    pour un temps  @:¬:[NA].*:[me]:[si]
    pour un temps  [<end>|,|)]
        <<- ~1:3>> *

    >preuve à l’ appui
        <<- not morph(<1, ":D") ~>> *

    sans détour  @:¬:[NA].*:[me]:[si]
    sans détour  [<end>|,|)]
        <<- ~1:2>> *



    sans [réserve|surprise]  @:¬:[NA].*:[fe]:[si]
    sans [réserve|surprise]  [<end>|,|)]
        <<- ~1:2>> *

    semblait-il
    semble-t-il
        <<- not value(<1, "|ça|cela|ceci|me|m’|te|t’|lui|nous|vous|leur|ne|n’|") ~>> *

    soit dit entre nous
................................................................................
    >attendre [de|d’] pied ferme
    >battre à plate couture
    >battre en [brèche|retraite]
    >boire comme un trou
    [>brûler|>bruler] à vif
    >charger à blanc
    >chauffer à blanc

    >compter à rebours
    >condamner à mort
    >couler à ?grands¿ flots
    >cour d’ assises
    >demander [assistance|audience|conseil|pardon]
    >dire [adieu|merde]
    [>donner|>redonner] [naissance|sens|suite|vie]
................................................................................
TEST: on ne peut convoquer un citoyen sur la base des textes constitutionnels, devenus dans ce cas incriminants.
TEST: ce sont des gens bien
TEST: beaucoup d’entre nous se souviennent de ce fameux jour
TEST: Hormis les enseignements fondamentaux transmis à la petite école, la suite n’est qu’une infinie perte de temps où l’on bourre l’esprit des élèves de connaissances parfaitement inutiles, dont la plupart d’entre nous ne gardent aucun souvenir sitôt les portes du lycée franchies.
TEST: il ne désirait ne plus le faire…
TEST: Ma chambre est trois fois plus grande que la tienne.
TEST: Il est trois ans plus jeune que moi.



@@@@
@@@@
@@@@
@@@@
@@@@END_GRAPH                                                                                      _
................................................................................
        <<- /conf/ -2>> gent                        && Confusion. « Gente » est un adjectif vieilli. Utiliser « gent » pour désigner un groupe de personnes.

TEST: la {{gente}} masculine est grossière et l’a toujours été.


# golf / golfe
__conf_golf_golfe2__
    >jouer au golfe

        <<- /conf/ -3>> golf                        && Confusion. Un golfe est une zone maritime qui avance dans les terres. Pour le sport, écrivez “golf”.

TEST: il joue au {{golfe}} tous les jours.
TEST: Jouer au golf.


# goutte / goûte
__conf_goûte_goutte__
    [goûte|goûtes|goute|goutes] [de|d’] [alcool|acide|amour|bière|eau|folie|huile|javel|lait|liquide|mercure|miel|peinture|pluie|rhum|rosée|salive|sang|semence|sperme|sueur|urine|vin|vinaigre|whisky]
        <<- /conf/ -1>> =\1.replace("û", "u").replace("t", "tt")
        && Confusion : “goûter” signifie utiliser le sens du goût. Pour une petite quantité de liquide, écrivez “goutte”.|https://fr.wiktionary.org/wiki/goutte

    >passer entre les [goûte+s|goute+s]
        <<- /conf/ --1>> gouttes                    && Confusion. Une particule de fluide s’écrit “goutte”.|https://fr.wiktionary.org/wiki/goutte

    [à|a] [grosse+s] [goute+s|goûte+s]
        <<- /conf/ ->> à grosses gouttes            && Confusion. Locution adverbiale “à grosses gouttes”.
................................................................................
TEST: dans la {{sale}} des professeurs
TEST: une {{sale}} d’arcade
TEST: ils sont tellement {{salles}}
TEST: pour le service en salle


# sans / sens
__conf_sens_dessus_dessous__
    sans dessus dessous
    sans-dessus-dessous
        <<- /conf/ ->> sens dessus dessous                          && Confusion. Locution adverbiale : « sens dessus dessous ».|https://fr.wiktionary.org/wiki/tache




















TEST: Tout est {{sans dessus dessous}}.







# aller sans dire
__conf_aller_sans_dire__
    [il|ça|cela|ceci] >aller s’ en dire
        <<- /conf/ -3:4>> sans                                      && Confusion. Locution “aller sans dire”.|https://fr.wiktionary.org/wiki/cela_va_sans_dire#fr

................................................................................
        -4>> =suggSing(\4)                                                                          && Accord de nombre erroné avec “\3” : “\4” devrait être au singulier.

TEST: L’{{amande}} {{amer}}
TEST: l’{{amicale}} {{animal}}
TEST: l’amour {{immortels}}
TEST: du chien et de l’{{excellente}} {{collier}} qu’il avait autour du cou.
TEST: du chien et de l’étonnant {{colliers}} qu’il avait autour du cou.



__gn_le_1m__
    ,  le  *WORD
        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)") -2>> =suggLesLa(\3)           && Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            && Accord de genre erroné : « \2 » est un déterminant masculin.
        <<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":[siGW]") -3>> =suggMasSing(\3)               && Accord de nombre erroné : « \3 » devrait être au singulier.
................................................................................
TEST: {{Le}} personne répond.
TEST: {{le}} {{quotients}}
TEST: Comme avec l’Hyperloop, le bus chinois conçu pour passer au-dessus des voitures


__gn_le_2m__
    le  *WORD  *WORD
        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|") and not \3.startswith("seul") >>>
        <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3, True)                                                                 && Accord de genre erroné : « \1 \2 » est masculin, « \3 » est féminin.
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggMasSing(\3)                                                                       && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou]  le  *WORD  *WORD
        <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]") and not \4.startswith("seul") >>>
        <<- /gn/ morph(\3, ":[NA].*:[me]", ":(?:B|G|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4, True)                                                                 && Accord de genre erroné : « \2 \3 » est masculin, « \4 » est féminin.
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\4, \4)
        -4>> =suggMasSing(\4)                                                                       && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: le test très {{cons}} qu’on a passé hier.
TEST: c’était le chien {{perdue}} des voisins.
................................................................................
TEST: à la Richard Nixon Foundation
TEST: à ne plus se laisser faire la fois d’après
TEST: il pense à la fois où nous avons eu cet accident idiot.


__gn_la_2m__
    la  *WORD  *WORD
        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
        <<- /gn/ morph(\2, ":[NA].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:m", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3, True)                                                         && Accord de genre erroné : « \1 \2 » est féminin, « \3 » est masculin.
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggFemSing(\3)                                                               && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou|de|d’]  la  *WORD  *WORD
        <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
        <<- /gn/ morph(\3, ":[NA].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4, True)                                                         && Accord de genre erroné : « \2 \3 » est féminin, « \4 » est masculin.
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
        -4>> =suggFemSing(\4)                                                               && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: La plus grande {{cinglé}}.
TEST: il imaginait de la pluie {{noir}} tombant sur une terre dévastée.
................................................................................
TEST: J’en ai assez de {{leur}} {{délires}}
TEST: {{Leur}} {{perceptions}} des choses m’exaspère.
TEST: dans {{leur}} {{usines}}


__gn_leur_2m__
    leur  *WORD  *WORD
        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
        <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
            and not apposition(\2, \3)
        -3>> =switchGender(\3, False)                                                       && Accord de genre erroné entre « \2 » et « \3 ».
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2, False)                  && Accord de genre erroné avec « \3 ».
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggSing(\3)                                                                  && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.
        <<- /gn/ __also__ and morph(\2, ":[NA].*:i") -1>> leurs                             && Accord de nombre erroné avec « \2 \3 ».

    [et|ou|de|d’]  leur  *WORD  *WORD
        <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
        <<- /gn/ ((morph(\3, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\4, ":[NA].*:f", "*")) or (morph(\3, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\4, ":[NA].*:m", "*")))
            and not apposition(\3, \4)
        -4>> =switchGender(\4, False)                                                       && Accord de genre erroné entre « \3 » et « \4 ».
        <<- /gn/ __also__ and hasFemForm(\3) -3>> =switchGender(\3, False)                  && Accord de genre erroné avec « \4 ».
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
        -4>> =suggSing(\4)                                                                  && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.
        <<- /gn/ __also__ and morph(\3, ":[NA].*:i") -2>> leurs                             && Accord de nombre erroné avec « \3 \4 ».
................................................................................
TEST: mille et une merveilles
TEST: Quatorze heures découpées en quatre parties, une sortant en salles chaque semaine


## un / une
__gn_un_2m__
    un  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|d’|") and not \3.startswith("seul") >>>
        <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3, True)                                                                 && Accord de genre erroné : « \1 \2 » est masculin, « \3 » est féminin.
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3)                                                                       && Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.

    [et|ou|d’]  un  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
        <<- /gn/ morph(\3, ":[NA].*:[me]", ":(?:B|G|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4, True)                                                                 && Accord de genre erroné : « \2 \3 » est masculin, « \4 » est féminin.
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4)                                                                       && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: un exercice pas très {{utiles}}.                        ->> utile
TEST: un homme {{grands}}                                     ->> grand
................................................................................
TEST: que sais-tu d’un homme {{grande}} comme un arbre
TEST: je me souviens d’un homme {{arrogants}}
TEST: C’est pas les quelques vues sur Linux qui vont rattraper un scénario {{bancale}}.


__gn_une_2m__
    une  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|d’|") and not \3.startswith("seul") >>>
        <<- /gn/ morph(\2, ":[NA].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:m", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3, True)                                                                 && Accord de genre erroné : « \1 \2 » est féminin, « \3 » est masculin.
        <<- /gn/ \2 != "fois" and morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3)                                                                       && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou|d’]  une  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
        <<- /gn/ morph(\3, ":[NA].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4, True)                                                                 && Accord de genre erroné : « \2 \3 » est féminin, « \4 » est masculin.
        <<- /gn/ \3 != "fois" and morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4)                                                                       && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: Une femme {{laconiques}}.                               ->> laconique
TEST: Une grande {{homme}}.
................................................................................
TEST: téléphone {{au}} {{boulangère}}
TEST: au chien, au chat, au poulet
TEST: à partir de pièces détachées, au départ entièrement venues de l’étranger puis en partie fabriquées sur place


__gn_det_mas_sing_2m__
    [ce|cet|quel|au|ledit|dudit|audit|aucun|nul]  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
        <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3, True)                                                         && Accord de genre erroné : « \2 » est masculin, « \3 » est féminin.
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggMasSing(\3)                                                               && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou|de|d’]  [ce|cet|quel|au|ledit|dudit|audit|aucun|nul]  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
        <<- /gn/ morph(\3, ":[NA].*:[me]", ":(?:B|G|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4, True)                                                         && Accord de genre erroné : « \3 » est masculin, « \4 » est féminin.
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
        -4>> =suggMasSing(\4)                                                               && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: cet outil {{terribles}} qu’il a dans les mains
TEST: J’aimerais connaître de quel parti {{gauchistes}} on parle.
................................................................................
TEST: mon {{excellentes}} mémoire
TEST: {{ton}} {{belle}} mémoire
TEST: {{mon}} {{chienne}}


__gn_mon_ton_son_2m__
    [mon|ton|son]  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
        <<- /gn/ morph(\2, ":[NA].*:m", ":(?:B|G|e|V0|f)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3, True)                                                         && Accord de genre erroné : « \2 » est masculin, « \3 » est féminin.
        <<- /gn/ morph(\2, ">[aâeéèêiîoôuûyœæ].*:[NA].*:f", ":(?:B|G|e|V0|m)") and morph(\3, ":[NA].*:m", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3, True)                                                         && Accord de genre erroné : « \2 » est féminin, « \3 » est masculin.
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggMasSing(\3)                                                               && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou|de|d’]  [mon|ton|son]  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
        <<- /gn/ morph(\3, ":[NA].*:m", ":(?:B|G|e|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4, True)                                                         && Accord de genre erroné : « \3 » est masculin, « \4 » est féminin.
        <<- /gn/ morph(\3, ">[aâeéèêiîoôuûyœæ].*:[NA].*:f", ":(?:B|G|e|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4, True)                                                         && Accord de genre erroné : « \3 » est féminin, « \4 » est masculin.
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
        -4>> =suggMasSing(\4)                                                               && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

................................................................................
TEST: {{ma}} amour                                            ->> mon
TEST: ma {{carlingues}}
TEST: Après cet épisode, la SA a joué un rôle marginal dans l’histoire du Troisième Reich


__gn_det_fem_sing_2m__
    [ma|ta|sa|cette|quelle|ladite]  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
        <<- /gn/ morph(\2, ":[NAQ].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NAQ].*:m", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3, True)                                                         && Accord de genre erroné : « \1 \2 » est féminin, « \3 » est masculin.
        <<- /gn/ morph(\2, ":[NAQ].*:[si]", ":G") and morph(\3, ":[NAQ].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggFemSing(\3)                                                               && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou|de|d’]  [ma|ta|sa|cette|quelle|ladite]  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NAQ]|>(?:et|ou)/") and not \4.startswith("seul") >>>
        <<- /gn/ morph(\3, ":[NAQ].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NAQ].*:m", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4, True)                                                         && Accord de genre erroné : « \3 » est féminin, « \4 » est masculin.
        <<- /gn/ morph(\3, ":[NAQ].*:[si]", ":G") and morph(\4, ":[NAQ].*:p", ":[GWsi]") and not apposition(\3, \4)
        -4>> =suggFemSing(\4)                                                               && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: quelle belle {{étourdi}}, cette gamine
TEST: j’en ai assez de cette ville {{stressées}} en permanence.
................................................................................
        -1>> quelques                                                                       && Il manque un “s” à « quelque » ou « \2 » doit être au singulier.

TEST: {{Quelque}} amis


__gn_det_epi_sing_2m__
    [chaque|quelque|notre|votre]  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
        <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
            and not apposition(\2, \3)
        -3>> =switchGender(\3, False)                                                       && Accord de genre erroné entre « \2 » et « \3 ».
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2, False)                  && Accord de genre erroné avec « \3 ».
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggSing(\3)                                                                  && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou|de|d’]  [chaque|quelque|notre|votre]  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
        <<- /gn/ ((morph(\3, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\4, ":[NA].*:f", "*")) or (morph(\3, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\4, ":[NA].*:m", "*")))
            and not apposition(\3, \4)
        -4>> =switchGender(\4, False)                                                       && Accord de genre erroné entre « \3 » et « \4 ».
        <<- /gn/ __also__ and hasFemForm(\3) -3>> =switchGender(\3, False)                  && Accord de genre erroné avec « \4 ».
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
        -4>> =suggSing(\4)                                                                  && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

................................................................................
TEST: les {{abricot}}                                         ->> abricots
TEST: tels que les décrit Macron
TEST: J’en ramasse quelques-unes, puis les glisse dans l’une de mes poches, ça me fera un souvenir.


__gn_les_2m__
    les  *WORD  *WORD
        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
        <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
            and not apposition(\2, \3)
        -3>> =switchGender(\3, True)                                                                && Accord de genre erroné entre « \2 » et « \3 ».
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2, True)                           && Accord de genre erroné avec « \3 ».
        <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
        -3>> =suggPlur(\3)                                                                          && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.

    [et|ou]  les  *WORD  *WORD
        <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]") and not \3.startswith("seul") >>>
        <<- /gn/ ((morph(\3, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\4, ":[NA].*:f", "*")) or (morph(\3, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\4, ":[NA].*:m", "*")))
            and not apposition(\3, \4)
        -4>> =switchGender(\4, True)                                                                && Accord de genre erroné entre « \3 » et « \4 ».
        <<- /gn/ __also__ and hasFemForm(\3) -3>> =switchGender(\3, True)                           && Accord de genre erroné avec « \4 ».
        <<- /gn/ morph(\3, ":[NA].*:[pi]") and morph(\4, ":[NA].*:s", "*") and not apposition(\3, \4) and not (value(>1, "|et|,|") and morph(>2, ":A"))
        -4>> =suggPlur(\4)                                                                          && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel.

................................................................................
TEST: aux {{personne}}
TEST: j’entends ces {{même}} âneries tous les jours
TEST: clafoutis aux {{abricot}}


__gn_det_epi_plur_2m__
    [ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|aux|moult]  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|de|d’|au|aux|") and not \3.startswith("seul") >>>
        <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
            and not apposition(\2, \3)
        -3>> =switchGender(\3, True)                                                                && Accord de genre erroné entre « \2 » et « \3 ».
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2, True)                           && Accord de genre erroné avec « \3 ».
        <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
        -3>> =suggPlur(\3)                                                                          && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.

    [et|ou|de|d’]  [ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|aux|moult]  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
        <<- /gn/ ((morph(\3, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\4, ":[NA].*:f", "*")) or (morph(\3, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\4, ":[NA].*:m", "*")))
            and not apposition(\3, \4)
        -4>> =switchGender(\4, True)                                                                && Accord de genre erroné entre « \3 » et « \4 ».
        <<- /gn/ __also__ and hasFemForm(\3) -3>> =switchGender(\3, True)                           && Accord de genre erroné avec « \4 ».
        <<- /gn/ morph(\3, ":[NA].*:[pi]") and morph(\4, ":[NA].*:s", "*") and not apposition(\3, \4) and not (value(>1, "|et|,|") and morph(>2, ":A"))
            and not (\1.startswith("de") and value(<1, "|un|une|"))
        -4>> =suggPlur(\4)                                                                          && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel.

TEST: ces {{beaux}} {{institutions}}
TEST: nos petites {{fille}}
TEST: de plusieurs {{grands}} {{avocates}}
TEST: de vos défauts {{terrible}}, je connais presque tout.
TEST: Les éléments caractéristiques liés à ses valeurs historique et architecturale
................................................................................


__gn_det_plur_3m__
    [ces|mes|tes|ses|nos|vos|quels|quelles|aux]             *WORD  *WORD  *WORD
    [plusieurs|quelques|certains|certaines|moult]           *WORD  *WORD  *WORD
    [lesdits|lesdites|desdits|desdites|auxdits|auxdites]    *WORD  *WORD  *WORD
        <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:[pi]", ":(?:[123][sp]|G)")
            and morph(\4, ":[NA].*:s", "*") and \4.islower() and not before("(?i)\\bune? de +$") and not \4.startswith("seul")
        -4>> =suggPlur(\4)                                                                  && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au pluriel.

    leurs  *WORD  *WORD  *WORD
        <<- /gn/ morph(\2, ":[NA].*:[pi]", "[123][sp]") and morph(\3, ":[NA].*:[pi]", ":(?:[123][sp]|G)")
            and morph(\4, ":[NA].*:s", "*") and not before("(?i)\\bune? de +$") and not \4.startswith("seul")
        -4>> =suggPlur(\4)                                                                  && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au pluriel.

TEST: ces petites sottes {{déjantée}}
TEST: Leurs grands plans {{dépassé}} par les évènements
TEST: Prendre goût aux heures passées seul à marcher


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

TEST: {{Quels}} que soient ces idiotes                        ->> Quelles
TEST: {{Quels}} qu’en soient les raisons                      ->> Quelles


__gn_det_mas_plur_2m__
    [certains|quels|lesdits|desdits|auxdits]  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
        <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
        -3>> =suggMasPlur(\3, True)                                                         && Accord de genre erroné : « \2 » est masculin, « \3 » est féminin.
        <<- /gn/ morph(\2, ":[NA].*:[pi]", ":G") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
        -3>> =suggMasPlur(\3)                                                               && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.

    [et|ou|de|d’]  [certains|quels|lesdits|desdits|auxdits]  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not \3.startswith("seul") >>>
        <<- /gn/ morph(\3, ":[NA].*:[me]", ":(?:B|G|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
        -4>> =suggMasPlur(\4, True)                                                         && Accord de genre erroné : « \3 » est masculin, « \4 » est féminin.
        <<- /gn/ morph(\3, ":[NA].*:[pi]", ":G") and morph(\4, ":[NA].*:s", "*") and not apposition(\3, \4) and not (value(>1, "|et|,|") and morph(>2, ":A"))
            and not (\1.startswith("de") and value(<1, "|un|une|"))
        -4>> =suggMasPlur(\4)                                                               && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel.

TEST: certains claviers {{dégueulasse}}
TEST: certains hommes {{petite}}
TEST: auxdits hommes {{connu}}
TEST: quels hommes {{grandes}}
TEST: elle se rappelle de quels rapports {{désastreuses}} il s’agit.
TEST: de quels grands {{fou}} s’agit-il ?
TEST: chez certains la revue Limite provoque des crises d’hystérie.


__gn_det_fem_plur_2m__
    [certaines|quelles|lesdites|desdites|auxdites]  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not \3.startswith("seul") >>>
        <<- /gn/ morph(\2, ":[NA].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:m", "*") and not apposition(\2, \3)
        -3>> =suggFemPlur(\3, True)                                                         && Accord de genre erroné : « \2 » est féminin, « \3 » est masculin.
        <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
        -3>> =suggFemPlur(\3)                                                               && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.

    [et|ou|de|d’]  [certaines|quelles|lesdites|desdites|auxdites]  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not \4.startswith("seul") >>>
        <<- /gn/ morph(\3, ":[NA].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
        -4>> =suggFemPlur(\4, True)                                                         && Accord de genre erroné : « \3 » est féminin, « \4 » est masculin.
        <<- /gn/ morph(\3, ":[NA].*:[pi]") and morph(\4, ":[NA].*:s", "*") and not apposition(\3, \4) and not (value(>1, "|et|,|") and morph(>2, ":A"))
            and not (\1.startswith("de") and value(<1, "|un|une|"))
        -4>> =suggFemPlur(\4)                                                               && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel.

TEST: certaines idioties {{stupide}}
TEST: quelles grandes {{idiots}}
TEST: je ne sais guère de quelles âneries {{proférés}} on parle.
TEST: quelles étonnantes {{petits}}
TEST: ici ou auxdites lointaines {{contrée}}
................................................................................

    [certains|certaines|plusieurs|quelques-uns|quelques-unes] d’ entre nous
        <<- /1>> _d_entre_nous_

    [certains|certaines|plusieurs|quelques-uns|quelques-unes] d’ entre vous
        <<- /1>> _d_entre_vous_


    [aucun|aucune] des *WORD [ne|n’]
        <<- ~2:3>> *

    [aucun|aucune] des *WORD *WORD [ne|n’]
        <<- ~2:4>> *

    beaucoup [de|d’] *WORD <end>
    beaucoup [de|d’] *WORD ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|y|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|iel|iels|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    beaucoup [de|d’] *WORD @:[VR]¬:[NAP]
    beaucoup [de|d’] *WORD , @¬:[NA]
        <<- morph(\3, ":[NA].*:p", ":(?:[NA].*:[si]|G)") /1>> bcp_plur
        <<- morph(\3, ":[NA].*:s", ":(?:[NA].*:[pi]|G)") /1>> bcp_sing
        <<- ~2:3>> *

    la plupart des *WORD <end>
    la plupart des *WORD ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|y|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|iel|iels|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    la plupart des *WORD @:[VR]¬:[NAP]
    la plupart des *WORD , @¬:[NA]
        <<- ~3:4>> *
................................................................................
    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_à_verbeétat_)   à  ?[ne|n’]¿ ?[en|y]¿       /_LVEF_verbe_à_verbeétat_   *WORD
    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_de_verbeétat_)  [de|d’] ?[ne|n’]¿ ?[en|y]¿  /_LVEF_verbe_de_verbeétat_  *WORD
        <<- /ppas/ not value(\-1, "|légion|néant|réalité|") and
            ((morph(\1, ":[NA].*:f", ":[GWme]") and morph(\-1, ":A.*:m", ":[GWMfe]")) or (morph(\1, ":[NA].*:m", ":[GWfe]") and morph(\-1, ":A.*:f", ":[GWme]")))
            and (morph(\2, ":[123]s") or (not tag(\1, "_enum_") and morph(\2, ":P")))
        --1>> =switchGender(\-1)                                                                    && Accord erroné : “\1” et “\-1” ne sont pas accordés en genre.

    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre])                   *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (>avoir) [été|semblé|paru]                                                                     *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  ([>être|>sembler])  [devenus|redevenus|restés|demeurés|devenues|redevenues|restées|demeurées]  *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_verbeétat_)     ?[en|y]¿                    /_LVEF_verbe_verbeétat_              *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_être_ppas_)     ?[en|y]¿  être              /_LVEF_verbe_être_ppas_              *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_avoir_ppas_)    ?[en|y]¿  avoir             /_LVEF_verbe_avoir_ppas_             *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_à_verbeétat_)   à  ?[ne|n’]¿ ?[en|y]¿       /_LVEF_verbe_à_verbeétat_            *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_de_verbeétat_)  [de|d’] ?[ne|n’]¿ ?[en|y]¿  /_LVEF_verbe_de_verbeétat_           *WORD
        <<- /ppas/ not value(\-1, "|légion|néant|réalité|") and
            ((morph(\1, ":[NA].*:f", ":[GWme]") and morph(\-1, ":A.*:m", ":[GWMfe]")) or (morph(\1, ":[NA].*:m", ":[GWfe]") and morph(\-1, ":A.*:f", ":[GWme]"))) and morph(\2, ":(?:[123]p|P)")
        --1>> =switchGender(\-1)                                                                    && Accord erroné : “\1” et “\-1” ne sont pas accordés en genre.























    *WORD  [que|qu’]  [un|le|ce|cet|une|la|ma|ta|sa|cette|l’|mon|ton|son|notre|votre|leur|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  *WORD  ?[ne|n’]¿  ?[en|y]¿
        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
        || [être|devenir|redevenir|rester|paraître|paraitre|sembler]                                *WORD
    *WORD  [que|qu’]  [un|le|ce|cet|une|la|ma|ta|sa|cette|l’|mon|ton|son|notre|votre|leur|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  *WORD  ?[ne|n’]¿  ?[en|y]¿
        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
        || être [devenu+e|redevenu+e|resté+e|demeuré+e]                                             *WORD
    *WORD  [que|qu’]  [un|le|ce|cet|une|la|ma|ta|sa|cette|l’|mon|ton|son|notre|votre|leur|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs]  *WORD  ?[ne|n’]¿  ?[en|y]¿
        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
        || avoir [été|semblé|paru]                                                                  *WORD
        <<- /ppas/ checkAgreement(\1, \-1) !-1>>

TEST: Un orage est {{annoncée}}.
TEST: ce chat ne sera pas {{euthanasiée}}
TEST: Le chien qui n’y sera pas {{traitée}}
................................................................................
TEST: cette carte qui n’y sera jamais {{retrouvé}} à temps
TEST: Ma mémoire qui a aussi été {{effacé}}.
TEST: Sa femme qui ne paraît pas avoir été {{choqué}}
TEST: l’avenir de la région paraissait {{suspendue}} à ce financement
TEST: l’idiot qui n’y affirmait pas être devenu {{géniale}} mais seulement moins ignorant
TEST: Mon ami qui pensait être {{suivie}}
TEST: l’écolier qui ne croyait pas avoir été {{brillante}}
TEST: les femmes sont vraiment {{partis}}                                         ->> parties
TEST: les hommes n’en sont pas tout à fait {{fâchées}}                            ->> fâchés
TEST: plusieurs invités qui n’en sont pas {{contentes}}
TEST: les réunions sans cesse reportées qui sont {{annulés}}
TEST: les hommes croyant être {{instruites}}









TEST: Les tortures que ce journaliste pense être “normales”.
TEST: La première était René, le parfumeur, qui s’approcha de Catherine
TEST: les abrutis sont légion


__ppas_nom_propre_être_accord_genre__
    [<start>|,|$:Cs]  ($:M)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre])          *WORD
................................................................................
TEST: Mais parmi les millions de causes à défendre, lesquelles choisir ?
TEST: les failles par lesquelles entrait l’eau étaient impossibles à boucher.


__conj_beaucoup__
    beaucoup    @:V¬:(?:P|Q|G|Y)
        <<- /conj/ not morph(<1, ":[VR]") >>>
        <<- /conj/ tag(\1, "bcp_plur") and not morph(\2, ":3p")
        -2>> =suggVerb(\2, ":3p")                                   && Conjugaison erronée. Accord avec “\1”. Le substantif suivant étant au pluriel, le verbe devrait être à la 3ᵉ personne du pluriel.
        <<- /conj/ __else__ and tag(\1, "bcp_sing") and not morph(\2, ":3s")
        -2>> =suggVerb(\2, ":3s")                                   && Conjugaison erronée. Accord avec “\1”. Le substantif suivant étant au singulier, le verbe devrait être à la 3ᵉ personne du singulier.
        <<- /conj/ __else__ and \2 != "a" and not tag(\1, "bcp_sing") and not morph(\2, ":3p") and not (space_after(\1, 1, 2) and morph(\2, ":V0"))
        -2>> =suggVerb(\2, ":3p")                                   && Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    beaucoup    qui  @:V¬:(?:3p|P|G)
        <<- /conj/ -3>> =suggVerb(\3, ":3p")                        && Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: beaucoup {{vienne}}
TEST: Beaucoup d’hommes y {{était}}.







|
>
>
>



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












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







 







>
>
>
>
>
>







 







>
>
>
>
>
>
>
>
>







 







|







 







>







 







<


>
>







 







>







 







<







 







|







 







>







 







|
|
|
|
|
|
|
|







 







|
|
>
>













>
>
|
|







 







>







 







|







 







|
>









|







 







|
|



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

>
>
>
>
>







 







>







 







|






|







 







|






|







 







|









|







 







|






|







 







|






|







 







|






|







 







|








|







 







|






|







 







|








|







 







|








|







 







|








|





|







 







|




|







 







|






|



|













|






|



|







 







<










|
|







 







|
|
|
|
|
|
|
|




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


|


|







 







|
|



>
>
>
>
>
>
>
>
>







 







|

|

|







1937
1938
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950



















1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
....
1986
1987
1988
1989
1990
1991
1992
1993
1994
1995
1996
1997
1998
1999
2000
2001
2002
2003
2004
2005
.....
11512
11513
11514
11515
11516
11517
11518
11519
11520
11521
11522
11523
11524
11525
11526
11527
11528
11529
11530
11531
11532
11533
11534
.....
13215
13216
13217
13218
13219
13220
13221
13222
13223
13224
13225
13226
13227
13228
13229
.....
13713
13714
13715
13716
13717
13718
13719
13720
13721
13722
13723
13724
13725
13726
13727
.....
14288
14289
14290
14291
14292
14293
14294

14295
14296
14297
14298
14299
14300
14301
14302
14303
14304
14305
.....
15155
15156
15157
15158
15159
15160
15161
15162
15163
15164
15165
15166
15167
15168
15169
.....
15357
15358
15359
15360
15361
15362
15363

15364
15365
15366
15367
15368
15369
15370
.....
15452
15453
15454
15455
15456
15457
15458
15459
15460
15461
15462
15463
15464
15465
15466
.....
15476
15477
15478
15479
15480
15481
15482
15483
15484
15485
15486
15487
15488
15489
15490
.....
16041
16042
16043
16044
16045
16046
16047
16048
16049
16050
16051
16052
16053
16054
16055
16056
16057
16058
16059
16060
16061
16062
.....
16217
16218
16219
16220
16221
16222
16223
16224
16225
16226
16227
16228
16229
16230
16231
16232
16233
16234
16235
16236
16237
16238
16239
16240
16241
16242
16243
16244
16245
16246
16247
16248
16249
16250
16251
.....
16388
16389
16390
16391
16392
16393
16394
16395
16396
16397
16398
16399
16400
16401
16402
.....
16715
16716
16717
16718
16719
16720
16721
16722
16723
16724
16725
16726
16727
16728
16729
.....
18106
18107
18108
18109
18110
18111
18112
18113
18114
18115
18116
18117
18118
18119
18120
18121
18122
18123
18124
18125
18126
18127
18128
18129
18130
18131
.....
18922
18923
18924
18925
18926
18927
18928
18929
18930
18931
18932
18933
18934
18935
18936
18937
18938
18939
18940
18941
18942
18943
18944
18945
18946
18947
18948
18949
18950
18951
18952
18953
18954
18955
18956
18957
18958
18959
18960
18961
18962
18963
18964
18965
.....
19266
19267
19268
19269
19270
19271
19272
19273
19274
19275
19276
19277
19278
19279
19280
.....
19309
19310
19311
19312
19313
19314
19315
19316
19317
19318
19319
19320
19321
19322
19323
19324
19325
19326
19327
19328
19329
19330
.....
19371
19372
19373
19374
19375
19376
19377
19378
19379
19380
19381
19382
19383
19384
19385
19386
19387
19388
19389
19390
19391
19392
.....
19412
19413
19414
19415
19416
19417
19418
19419
19420
19421
19422
19423
19424
19425
19426
19427
19428
19429
19430
19431
19432
19433
19434
19435
19436
.....
19568
19569
19570
19571
19572
19573
19574
19575
19576
19577
19578
19579
19580
19581
19582
19583
19584
19585
19586
19587
19588
19589
.....
19591
19592
19593
19594
19595
19596
19597
19598
19599
19600
19601
19602
19603
19604
19605
19606
19607
19608
19609
19610
19611
19612
.....
19682
19683
19684
19685
19686
19687
19688
19689
19690
19691
19692
19693
19694
19695
19696
19697
19698
19699
19700
19701
19702
19703
.....
19715
19716
19717
19718
19719
19720
19721
19722
19723
19724
19725
19726
19727
19728
19729
19730
19731
19732
19733
19734
19735
19736
19737
19738
.....
19756
19757
19758
19759
19760
19761
19762
19763
19764
19765
19766
19767
19768
19769
19770
19771
19772
19773
19774
19775
19776
19777
.....
19793
19794
19795
19796
19797
19798
19799
19800
19801
19802
19803
19804
19805
19806
19807
19808
19809
19810
19811
19812
19813
19814
19815
19816
.....
19859
19860
19861
19862
19863
19864
19865
19866
19867
19868
19869
19870
19871
19872
19873
19874
19875
19876
19877
19878
19879
19880
19881
19882
.....
19931
19932
19933
19934
19935
19936
19937
19938
19939
19940
19941
19942
19943
19944
19945
19946
19947
19948
19949
19950
19951
19952
19953
19954
19955
19956
19957
19958
19959
19960
.....
20024
20025
20026
20027
20028
20029
20030
20031
20032
20033
20034
20035
20036
20037
20038
20039
20040
20041
20042
20043
.....
20247
20248
20249
20250
20251
20252
20253
20254
20255
20256
20257
20258
20259
20260
20261
20262
20263
20264
20265
20266
20267
20268
20269
20270
20271
20272
20273
20274
20275
20276
20277
20278
20279
20280
20281
20282
20283
20284
20285
20286
20287
20288
20289
20290
20291
20292
20293
20294
20295
20296
20297
.....
22773
22774
22775
22776
22777
22778
22779

22780
22781
22782
22783
22784
22785
22786
22787
22788
22789
22790
22791
22792
22793
22794
22795
22796
22797
22798
.....
24150
24151
24152
24153
24154
24155
24156
24157
24158
24159
24160
24161
24162
24163
24164
24165
24166
24167
24168
24169
24170
24171
24172
24173
24174
24175
24176
24177
24178
24179
24180
24181
24182
24183
24184
24185
24186
24187
24188
24189
24190
24191
24192
24193
24194
24195
24196
24197
24198
24199
24200
24201
24202
24203
24204
.....
24210
24211
24212
24213
24214
24215
24216
24217
24218
24219
24220
24221
24222
24223
24224
24225
24226
24227
24228
24229
24230
24231
24232
24233
24234
24235
24236
24237
.....
27616
27617
27618
27619
27620
27621
27622
27623
27624
27625
27626
27627
27628
27629
27630
27631
27632
27633
27634
    environ  [$:B|*NUM]
        <<- not value(<1, "|l’|un|cet|quel|") =>> exclude(\1, ":N")

    grave
        <<- morph(<1, ":D") =>> (\1, ":W")


__da_mots_grammaticaaux__
    autour [de|du|d’|des]
        <<- not morph(<1, ":D.*:[me]") =>> exclude(\1, ":N")

    dans
        <<- not morph(<1, ":D.*:p|>[a-z]+ième/") =>> select(\1, ":R")




















    [le|ce|cet|mon|ton|son|quel|quelque|notre|votre|un|leur|ledit|dudit|des|les|quelques|quel|quelle|quels|quelles]  [son|ton]
        <<- =>> exclude(\2, ":D")

    [la|ma|ta|sa|les|des|nos|vos|leur|leurs|quel|quelle|quels|quelles] personne
        <<- =>> select(\2, ":N")

    [le|la|l’|les|du|ces|des|mes|tes|ses|nos|vos|leurs|quelques|quels|quelles] même
        <<- =>> select(\2, ":A")

    [le|l’|mon|notre|votre|leur|mes|tes|ses|nos|vos|leurs|quel|quels|quelle|quelles] point
        <<- =>> select(\2, ":N")

    puis
        <<- not value(<1, "|je|ne|n’|le|la|l’|les|lui|nous|vous|leur|") =>> =exclude(\1, ":V")

    SA
        <<- morph(<1, ":D") =>> exclude(\1, ":D")

    passé  [<end>|,|$:R]
        <<- =>> exclude(\1, ":G")

    vu  [<end>|,|$:R]
        <<- =>> exclude(\1, ":G")

    y compris
        <<- not value(<1, "|n’|j’|tu|t’|m’|s’|") ~>> ␣
        <<- __also__ =>> define(\1, ":G:R")


__da_autre_chose_quelque_chose__
    quelque chose
        <<- =>> define(\2, ":N:m:s")

    autre chose
        <<- not morph(<1, ">entre/|:D") ~>> ␣
................................................................................
        <<- =>> define(\1, ":G")


__da_groupe_nominal__
    aucun  @:[NA].*:[me]
        <<- =>> exclude(\2, ":V")

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

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

    bac + ~^\d\d?$
        <<- ~>> ␣
        <<- =>> define(\1, ":N:e:i")

    [de|d’]  @:¬:[YD]
        <<- =>> exclude(\2, ":(?:[123][sp]|P)")

................................................................................
# ensemble
__sgpl_ensemble__
    [toutes|tous] ensembles
        <<- /sgpl/ -2>> ensemble                                    && Ici, “ensemble” est vraisemblablement un adverbe, donc invariable.|https://fr.wiktionary.org/wiki/ensemble

TEST: Allons-y toutes {{ensembles}}                             ->> ensemble


# en particulier
__sgpl_en_particulier__
    en particuliers
        <<- /conf/ not morph(<1, ">agir/") ->> en particulier       && Locution “en particulier” toujours au singulier.|https://fr.wiktionary.org/wiki/en_particulier

TEST: en général et {{en particuliers}}
TEST: agir en particulier averti.


# en rangs serrés
__sgpl_en_rangs_serrés__
    en rang serré
        <<- /sgpl/ ->> en rangs serrés|en ordre serré               && Au pluriel, car il y a plusieurs rangs. Vous pouvez aussi utiliser l’expression “en ordre serré”.

TEST: ils défilèrent {{en rang serré}}
................................................................................
    plus d’ une fois
    plus d’ une fois par [seconde|minute|heure|jour|semaine|mois|trimestre|semestre|an|année|décennie|siècle|millénaire]
    pour la [première|seconde|dernière|~ième$] fois
    pour la [première|seconde|dernière|~ième$] fois [de|d’] [ma|ta|sa|notre|votre|leur] ?misérable¿ vie ?[misérable|insignifiante|palpitante]¿
    pour la [première|seconde|dernière|~ième$] fois [de|d’] [mon|ton|son|notre|votre|leur] ?[misérable|insignifiante|palpitante]¿ existence ?[misérable|insignifiante|palpitante]¿
    pour la [seconde|dernière|~ième$] fois [de|d’] suite
    pour [trois|3] fois rien
    pour [cette|une] fois
    quelquefois
    quelques fois
    sans y [réfléchir|songer|penser] à [deux|2] fois
    souventes fois
    toutefois
    tant de fois
        <<- ~>> *
................................................................................
    dans le cas contraire
    dans [ce|ces] [cas-là|cas-ci]
    dans ce cas [précis|particulier]
    dans ces cas [précis|particuliers]
    dans l’ [idéal|immédiat]
    dans la mesure du possible
    dans la dernière ligne droite
    dans le feu de l’ action
    dans leur globalité
    dans leur grande majorité
    dans tout [cela|ça|ceci]
    dans un cas comme dans l’autre
    dans une [certaine|large|moindre] mesure
    dans une mauvaise passe
    d’ abord
................................................................................
    sous haute [surveillance|tension]
    stricto sensu
    sur [mon|ton|son|notre|votre|leur] [trente-et-un|31]
    sur [mon|ton|son|notre|votre|leur] trente et un
    sur ce ,
    sur ce plan-là
    sur la défensive

    sur la forme comme sur le fond
    sur la même longueur d’ onde
    sur la sellette
    sur le fil du rasoir
    sur le plan [local|cantonal|départemental|régional|national|européen|américain|africaine|asiatique|continental|international|planétaire|galactique|universel]
    sur le pied [de|d’] guerre
    sur le qui-vive
    surtout
    s’ il [te|vous] [plaît|plait]
    tant bien que mal
    tant s’ en faut
................................................................................
    >force d’ assaut
    >force [de|d’] caractère
    >fosse à [merde|>ordure|purin]
    >fosse aux lions
    >fou à lier
    [>fourgon|>fourgonnette] [de|d’] location
    >frayeur [de|d’] tous les diables
    >frein à >tambour
    >frousse [de|d’] tous les diables
    >fuite en avant
    >fusil à [plomb|pompe]
    >garde à vue
    >garde du corps
    gaz à >effet [de|d’] serre
    >genou à terre
................................................................................
    >sac [de|d’] [couchage|sport|voyage]
    >salaire à vie
    >salle à manger
    >salle [de|d’] [attente|>bain|bal|conférence|lecture|séjour|vente]
    >salon [de|d’] coiffure
    sas [de|d’] [confinement|décompression|décontamination|désinfection|livraison|protection|secours|sécurité]
    >sclérose en plaques

    >seconde d’ arc
    >sel [de|d’] [aluminium|ammonium|mer]
    >serpent à sonnette
    >service d’ ordre
    >seuil [de|d’] tolérance
    >seuil [de|d’] tolérance à la douleur
    >silo à [>grains|blé]
................................................................................
    >con comme la lune
    >con comme un balai
    >con comme une valise sans >poignée
    >corvéable à merci
    >court sur pattes
    [cousu+ses] [main]
    [cousu+ses] [de|d’] fil blanc
    [daté+ses] du [1er|1ᵉʳ|1|01|2|02|3|03|4|04|5|05|6|06|7|07|8|08|9|09|10|11|12|13|14|14|15|16|17|18|19|20|21|22|23|24|25|26|27|28|29|30|31] {mois} ?[prochain|passé|dernier|précédent|~^[0-9]{2,5}$]¿
    >digne [de|d’] [confiance|foi]
    >digne [de|d’] ce nom
    >droit comme un i
    >fort en gueule
    >fou [de|d’] rage ?[contenue|retenue]¿
    >élu à la majarité absolue
    >haut comme [trois|3] pommes
................................................................................
    >noir comme une nuit sans lune
    >pure comme [le|du] cristal
    >rapide à la comprenette
    [réglé+ses] comme du papier à musique
    [remis+es] à plat
    >sain [de|d’] [corps|esprit]
    >sain [de|d’] [corps|esprit] et [de|d’] [corps|esprit]
    [secret+s] défense
    >sourd comme un pot
    >sujet à interprétation
    >sujet à interprétations diverses
    >têtu comme une [bourrique|mule]
    >têtu comme un [âne|bourriquot|mulet]
    [tiré+ses] à [quatre|4] épingles
        <<- ~2:0>> *
................................................................................
    à [mes|tes|ses|nos|vos|leurs] [regards|yeux]  [<end>|,|)]
        <<- ~1:-2>> *

    à la dernière [minute|seconde]  @¬:A.*:[fe]:[si]
    à la dernière [minute|seconde]  [<end>|,|)]
        <<- ~1:-2>> *

    à la longue         @:¬:N.*:[fe]:[si]
    à la longue         [<end>|,|)]
    à la [dérive|mode]  @:¬:A.*:[fe]:[si]
    à la [dérive|mode]  [<end>|,|)]
    à l’ époque         @:¬:A.*:[fe]:[si]
    à l’ époque         [<end>|,|)]
    à l’ identique      @:¬:N.*:[si]
    à l’ identique      [<end>|,|)]
        <<- ~1:-2>> *

    à répétition  @¬:A.*:[fe]:[si]
    à répétition  [<end>|,|)]
        <<- ~1:2>> *

    au bout d’ un moment  @:¬:A.*:[me]:[si]
................................................................................
    pour cette raison [<end>|,|)]
        <<- ~1:3>> *

    pour de bon  @:¬:[NA].*:m:s
    pour de bon  [<end>|,|)]
        <<- ~1:3>> *

    pour la majeure partie  @:¬:A.*:[fe]:[si]
    pour la majeure partie  [<end>|,|)]
    pour partie             @:¬:A.*:[fe]:[si]
    pour partie             [<end>|,|)]
        <<- ~1:2>> *

    pour un temps  @:¬:[NA].*:[me]:[si]
    pour un temps  [<end>|,|)]
        <<- ~1:3>> *

    >preuve à l’ appui
        <<- not morph(<1, ":D") ~>> *

    sans détour  @:¬:[NA].*:[me]:[si]
    sans détour  [<end>|,|)]
        <<- ~1:2>> *

    sans grande surprise    @:¬:[NA].*:[fe]:[si]
    sans grande surprise    [<end>|,|)]
    sans [réserve|surprise] @:¬:[NA].*:[fe]:[si]
    sans [réserve|surprise] [<end>|,|)]
        <<- ~1:2>> *

    semblait-il
    semble-t-il
        <<- not value(<1, "|ça|cela|ceci|me|m’|te|t’|lui|nous|vous|leur|ne|n’|") ~>> *

    soit dit entre nous
................................................................................
    >attendre [de|d’] pied ferme
    >battre à plate couture
    >battre en [brèche|retraite]
    >boire comme un trou
    [>brûler|>bruler] à vif
    >charger à blanc
    >chauffer à blanc
    >classer sans suite
    >compter à rebours
    >condamner à mort
    >couler à ?grands¿ flots
    >cour d’ assises
    >demander [assistance|audience|conseil|pardon]
    >dire [adieu|merde]
    [>donner|>redonner] [naissance|sens|suite|vie]
................................................................................
TEST: on ne peut convoquer un citoyen sur la base des textes constitutionnels, devenus dans ce cas incriminants.
TEST: ce sont des gens bien
TEST: beaucoup d’entre nous se souviennent de ce fameux jour
TEST: Hormis les enseignements fondamentaux transmis à la petite école, la suite n’est qu’une infinie perte de temps où l’on bourre l’esprit des élèves de connaissances parfaitement inutiles, dont la plupart d’entre nous ne gardent aucun souvenir sitôt les portes du lycée franchies.
TEST: il ne désirait ne plus le faire…
TEST: Ma chambre est trois fois plus grande que la tienne.
TEST: Il est trois ans plus jeune que moi.
TEST: On peut sans doute laisser sans grand problème toutes les baskets à la mode être produites à l’autre bout du monde


@@@@
@@@@
@@@@
@@@@
@@@@END_GRAPH                                                                                      _
................................................................................
        <<- /conf/ -2>> gent                        && Confusion. « Gente » est un adjectif vieilli. Utiliser « gent » pour désigner un groupe de personnes.

TEST: la {{gente}} masculine est grossière et l’a toujours été.


# golf / golfe
__conf_golf_golfe2__
    >jouer      au golfe
    >pratiquer  le golfe
        <<- /conf/ -3>> golf                        && Confusion. Un golfe est une zone maritime qui avance dans les terres. Pour le sport, écrivez “golf”.

TEST: il joue au {{golfe}} tous les jours.
TEST: Jouer au golf.


# goutte / goûte
__conf_goûte_goutte__
    [goûte|goûtes|goute|goutes] [de|d’] [alcool|acide|amour|bière|eau|folie|huile|javel|lait|liquide|mercure|miel|peinture|pluie|rhum|rosée|salive|sang|semence|sperme|sueur|urine|vin|vinaigre|whisky]
        <<- /conf/ -1>> =\1.replace("û", "u").replace("t", "tt").replace("Û", "U").replace("T", "TT")
        && Confusion : “goûter” signifie utiliser le sens du goût. Pour une petite quantité de liquide, écrivez “goutte”.|https://fr.wiktionary.org/wiki/goutte

    >passer entre les [goûte+s|goute+s]
        <<- /conf/ --1>> gouttes                    && Confusion. Une particule de fluide s’écrit “goutte”.|https://fr.wiktionary.org/wiki/goutte

    [à|a] [grosse+s] [goute+s|goûte+s]
        <<- /conf/ ->> à grosses gouttes            && Confusion. Locution adverbiale “à grosses gouttes”.
................................................................................
TEST: dans la {{sale}} des professeurs
TEST: une {{sale}} d’arcade
TEST: ils sont tellement {{salles}}
TEST: pour le service en salle


# sans / sens
__conf_sang_sans_sens__
    [sans|san] dessus dessous
    sans-dessus-dessous
        <<- /conf/ ->> sens dessus dessous                          && Confusion. Locution adverbiale : « sens dessus dessous ».|https://fr.wiktionary.org/wiki/tache

    [sans|san] [bleu|royal|mêlé]
    [sans|san] humain
    [sans|san] de la victime
    [sans|san] des victimes
    [sans|san] >avoir >couler
    [sans|san] >couler
    [sans|san] qui >couler
    [sans|san] qui >avoir >couler
        <<- /conf/ morph(<1, ":D.*:[me]") -1>> sang                 && Confusion probable. Pour évoquer le fluide sanguin, écrivez “sang”.|https://fr.wiktionary.org/wiki/sang

    [couvert+ses|recouvert+ses] [de|d’] [sans|san|sens]
    >avoir [ça|cela|ceci] dans le [sans|san|sens]
    >buveur [de|d’] [sans|san|sens]
    >flot [de|d’] [sans|san|sens]
    la voix du [sans|san|sens]
    >pisser [le|du] [sans|sens]
    c >être [mon|ton|son|notre|votre|leur|leurs] [sans|san]
        <<- /conf/ --1>> sang                                       && Confusion probable. Pour évoquer le fluide sanguin, écrivez “sang”.|https://fr.wiktionary.org/wiki/sang

TEST: Tout est {{sans dessus dessous}}.
TEST: le {{sans}} a coulé.
TEST: le {{san}} qui coulera encore sera sur vos mains
TEST: elle a ça dans le {{sans}}
TEST: elle pissait le {{sans}}
TEST: ce témoignage va dans le sens de la victime.


# aller sans dire
__conf_aller_sans_dire__
    [il|ça|cela|ceci] >aller s’ en dire
        <<- /conf/ -3:4>> sans                                      && Confusion. Locution “aller sans dire”.|https://fr.wiktionary.org/wiki/cela_va_sans_dire#fr

................................................................................
        -4>> =suggSing(\4)                                                                          && Accord de nombre erroné avec “\3” : “\4” devrait être au singulier.

TEST: L’{{amande}} {{amer}}
TEST: l’{{amicale}} {{animal}}
TEST: l’amour {{immortels}}
TEST: du chien et de l’{{excellente}} {{collier}} qu’il avait autour du cou.
TEST: du chien et de l’étonnant {{colliers}} qu’il avait autour du cou.
TEST: elle prendra l’{{avions}} dès que possible


__gn_le_1m__
    ,  le  *WORD
        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)") -2>> =suggLesLa(\3)           && Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                            && Accord de genre erroné : « \2 » est un déterminant masculin.
        <<- /gn/ __else__ and morph(\3, ":[NA].*:p", ":[siGW]") -3>> =suggMasSing(\3)               && Accord de nombre erroné : « \3 » devrait être au singulier.
................................................................................
TEST: {{Le}} personne répond.
TEST: {{le}} {{quotients}}
TEST: Comme avec l’Hyperloop, le bus chinois conçu pour passer au-dessus des voitures


__gn_le_2m__
    le  *WORD  *WORD
        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3, True)                                                                 && Accord de genre erroné : « \1 \2 » est masculin, « \3 » est féminin.
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggMasSing(\3)                                                                       && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou]  le  *WORD  *WORD
        <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[me]", ":(?:B|G|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4, True)                                                                 && Accord de genre erroné : « \2 \3 » est masculin, « \4 » est féminin.
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\4, \4)
        -4>> =suggMasSing(\4)                                                                       && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: le test très {{cons}} qu’on a passé hier.
TEST: c’était le chien {{perdue}} des voisins.
................................................................................
TEST: à la Richard Nixon Foundation
TEST: à ne plus se laisser faire la fois d’après
TEST: il pense à la fois où nous avons eu cet accident idiot.


__gn_la_2m__
    la  *WORD  *WORD
        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:m", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3, True)                                                         && Accord de genre erroné : « \1 \2 » est féminin, « \3 » est masculin.
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggFemSing(\3)                                                               && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou|de|d’]  la  *WORD  *WORD
        <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4, True)                                                         && Accord de genre erroné : « \2 \3 » est féminin, « \4 » est masculin.
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
        -4>> =suggFemSing(\4)                                                               && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: La plus grande {{cinglé}}.
TEST: il imaginait de la pluie {{noir}} tombant sur une terre dévastée.
................................................................................
TEST: J’en ai assez de {{leur}} {{délires}}
TEST: {{Leur}} {{perceptions}} des choses m’exaspère.
TEST: dans {{leur}} {{usines}}


__gn_leur_2m__
    leur  *WORD  *WORD
        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
            and not apposition(\2, \3)
        -3>> =switchGender(\3, False)                                                       && Accord de genre erroné entre « \2 » et « \3 ».
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2, False)                  && Accord de genre erroné avec « \3 ».
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggSing(\3)                                                                  && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.
        <<- /gn/ __also__ and morph(\2, ":[NA].*:i") -1>> leurs                             && Accord de nombre erroné avec « \2 \3 ».

    [et|ou|de|d’]  leur  *WORD  *WORD
        <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ ((morph(\3, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\4, ":[NA].*:f", "*")) or (morph(\3, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\4, ":[NA].*:m", "*")))
            and not apposition(\3, \4)
        -4>> =switchGender(\4, False)                                                       && Accord de genre erroné entre « \3 » et « \4 ».
        <<- /gn/ __also__ and hasFemForm(\3) -3>> =switchGender(\3, False)                  && Accord de genre erroné avec « \4 ».
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
        -4>> =suggSing(\4)                                                                  && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.
        <<- /gn/ __also__ and morph(\3, ":[NA].*:i") -2>> leurs                             && Accord de nombre erroné avec « \3 \4 ».
................................................................................
TEST: mille et une merveilles
TEST: Quatorze heures découpées en quatre parties, une sortant en salles chaque semaine


## un / une
__gn_un_2m__
    un  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3, True)                                                                 && Accord de genre erroné : « \1 \2 » est masculin, « \3 » est féminin.
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3)                                                                       && Accord de nombre erroné avec « \2 » : « \3 » devrait être au singulier.

    [et|ou|d’]  un  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[me]", ":(?:B|G|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4, True)                                                                 && Accord de genre erroné : « \2 \3 » est masculin, « \4 » est féminin.
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4)                                                                       && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: un exercice pas très {{utiles}}.                        ->> utile
TEST: un homme {{grands}}                                     ->> grand
................................................................................
TEST: que sais-tu d’un homme {{grande}} comme un arbre
TEST: je me souviens d’un homme {{arrogants}}
TEST: C’est pas les quelques vues sur Linux qui vont rattraper un scénario {{bancale}}.


__gn_une_2m__
    une  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:m", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3, True)                                                                 && Accord de genre erroné : « \1 \2 » est féminin, « \3 » est masculin.
        <<- /gn/ \2 != "fois" and morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3)                                                                       && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou|d’]  une  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4, True)                                                                 && Accord de genre erroné : « \2 \3 » est féminin, « \4 » est masculin.
        <<- /gn/ \3 != "fois" and morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4)                                                                       && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: Une femme {{laconiques}}.                               ->> laconique
TEST: Une grande {{homme}}.
................................................................................
TEST: téléphone {{au}} {{boulangère}}
TEST: au chien, au chat, au poulet
TEST: à partir de pièces détachées, au départ entièrement venues de l’étranger puis en partie fabriquées sur place


__gn_det_mas_sing_2m__
    [ce|cet|quel|au|ledit|dudit|audit|aucun|nul]  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3, True)                                                         && Accord de genre erroné : « \2 » est masculin, « \3 » est féminin.
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggMasSing(\3)                                                               && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou|de|d’]  [ce|cet|quel|au|ledit|dudit|audit|aucun|nul]  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[me]", ":(?:B|G|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4, True)                                                         && Accord de genre erroné : « \3 » est masculin, « \4 » est féminin.
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
        -4>> =suggMasSing(\4)                                                               && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: cet outil {{terribles}} qu’il a dans les mains
TEST: J’aimerais connaître de quel parti {{gauchistes}} on parle.
................................................................................
TEST: mon {{excellentes}} mémoire
TEST: {{ton}} {{belle}} mémoire
TEST: {{mon}} {{chienne}}


__gn_mon_ton_son_2m__
    [mon|ton|son]  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:m", ":(?:B|G|e|V0|f)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
        -3>> =suggMasSing(\3, True)                                                         && Accord de genre erroné : « \2 » est masculin, « \3 » est féminin.
        <<- /gn/ morph(\2, ">[aâeéèêiîoôuûyœæ].*:[NA].*:f", ":(?:B|G|e|V0|m)") and morph(\3, ":[NA].*:m", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3, True)                                                         && Accord de genre erroné : « \2 » est féminin, « \3 » est masculin.
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggMasSing(\3)                                                               && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou|de|d’]  [mon|ton|son]  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:m", ":(?:B|G|e|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
        -4>> =suggMasSing(\4, True)                                                         && Accord de genre erroné : « \3 » est masculin, « \4 » est féminin.
        <<- /gn/ morph(\3, ">[aâeéèêiîoôuûyœæ].*:[NA].*:f", ":(?:B|G|e|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4, True)                                                         && Accord de genre erroné : « \3 » est féminin, « \4 » est masculin.
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
        -4>> =suggMasSing(\4)                                                               && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

................................................................................
TEST: {{ma}} amour                                            ->> mon
TEST: ma {{carlingues}}
TEST: Après cet épisode, la SA a joué un rôle marginal dans l’histoire du Troisième Reich


__gn_det_fem_sing_2m__
    [ma|ta|sa|cette|quelle|ladite]  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NAQ].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NAQ].*:m", "*") and not apposition(\2, \3)
        -3>> =suggFemSing(\3, True)                                                         && Accord de genre erroné : « \1 \2 » est féminin, « \3 » est masculin.
        <<- /gn/ morph(\2, ":[NAQ].*:[si]", ":G") and morph(\3, ":[NAQ].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggFemSing(\3)                                                               && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou|de|d’]  [ma|ta|sa|cette|quelle|ladite]  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NAQ]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NAQ].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NAQ].*:m", "*") and not apposition(\3, \4)
        -4>> =suggFemSing(\4, True)                                                         && Accord de genre erroné : « \3 » est féminin, « \4 » est masculin.
        <<- /gn/ morph(\3, ":[NAQ].*:[si]", ":G") and morph(\4, ":[NAQ].*:p", ":[GWsi]") and not apposition(\3, \4)
        -4>> =suggFemSing(\4)                                                               && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

TEST: quelle belle {{étourdi}}, cette gamine
TEST: j’en ai assez de cette ville {{stressées}} en permanence.
................................................................................
        -1>> quelques                                                                       && Il manque un “s” à « quelque » ou « \2 » doit être au singulier.

TEST: {{Quelque}} amis


__gn_det_epi_sing_2m__
    [chaque|quelque|notre|votre]  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
            and not apposition(\2, \3)
        -3>> =switchGender(\3, False)                                                       && Accord de genre erroné entre « \2 » et « \3 ».
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2, False)                  && Accord de genre erroné avec « \3 ».
        <<- /gn/ morph(\2, ":[NA].*:[si]", ":G") and morph(\3, ":[NA].*:p", ":[GWsi]") and not apposition(\2, \3)
        -3>> =suggSing(\3)                                                                  && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au singulier.

    [et|ou|de|d’]  [chaque|quelque|notre|votre]  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ ((morph(\3, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\4, ":[NA].*:f", "*")) or (morph(\3, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\4, ":[NA].*:m", "*")))
            and not apposition(\3, \4)
        -4>> =switchGender(\4, False)                                                       && Accord de genre erroné entre « \3 » et « \4 ».
        <<- /gn/ __also__ and hasFemForm(\3) -3>> =switchGender(\3, False)                  && Accord de genre erroné avec « \4 ».
        <<- /gn/ morph(\3, ":[NA].*:[si]", ":G") and morph(\4, ":[NA].*:p", ":[GWsi]") and not apposition(\3, \4)
        -4>> =suggSing(\4)                                                                  && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au singulier.

................................................................................
TEST: les {{abricot}}                                         ->> abricots
TEST: tels que les décrit Macron
TEST: J’en ramasse quelques-unes, puis les glisse dans l’une de mes poches, ça me fera un souvenir.


__gn_les_2m__
    les  *WORD  *WORD
        <<- /gn/ morph(\1, ":D") and not value(<1, "|et|ou|de|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
            and not apposition(\2, \3)
        -3>> =switchGender(\3, True)                                                                && Accord de genre erroné entre « \2 » et « \3 ».
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2, True)                           && Accord de genre erroné avec « \3 ».
        <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
        -3>> =suggPlur(\3)                                                                          && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.

    [et|ou]  les  *WORD  *WORD
        <<- /gn/ morph(\2, ":D") and not morph(<1, ":[NA]") and not morph(\3, ">seul/") >>>
        <<- /gn/ ((morph(\3, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\4, ":[NA].*:f", "*")) or (morph(\3, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\4, ":[NA].*:m", "*")))
            and not apposition(\3, \4)
        -4>> =switchGender(\4, True)                                                                && Accord de genre erroné entre « \3 » et « \4 ».
        <<- /gn/ __also__ and hasFemForm(\3) -3>> =switchGender(\3, True)                           && Accord de genre erroné avec « \4 ».
        <<- /gn/ morph(\3, ":[NA].*:[pi]") and morph(\4, ":[NA].*:s", "*") and not apposition(\3, \4) and not (value(>1, "|et|,|") and morph(>2, ":A"))
        -4>> =suggPlur(\4)                                                                          && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel.

................................................................................
TEST: aux {{personne}}
TEST: j’entends ces {{même}} âneries tous les jours
TEST: clafoutis aux {{abricot}}


__gn_det_epi_plur_2m__
    [ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|aux|moult]  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|de|d’|au|aux|") and not morph(\3, ">seul/") >>>
        <<- /gn/ ((morph(\2, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\3, ":[NA].*:f", "*")) or (morph(\2, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\3, ":[NA].*:m", "*")))
            and not apposition(\2, \3)
        -3>> =switchGender(\3, True)                                                                && Accord de genre erroné entre « \2 » et « \3 ».
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =switchGender(\2, True)                           && Accord de genre erroné avec « \3 ».
        <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
        -3>> =suggPlur(\3)                                                                          && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.

    [et|ou|de|d’]  [ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|aux|moult]  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ ((morph(\3, ":[NA].*:m", ":(?:B|e|G|V0|f)") and morph(\4, ":[NA].*:f", "*")) or (morph(\3, ":[NA].*:f", ":(?:B|e|G|V0|m)") and morph(\4, ":[NA].*:m", "*")))
            and not apposition(\3, \4)
        -4>> =switchGender(\4, True)                                                                && Accord de genre erroné entre « \3 » et « \4 ».
        <<- /gn/ __also__ and hasFemForm(\3) -3>> =switchGender(\3, True)                           && Accord de genre erroné avec « \4 ».
        <<- /gn/ morph(\3, ":[NA].*:[pi]") and morph(\4, ":[NA].*:s", "*") and not apposition(\3, \4) and not (value(>1, "|et|,|") and morph(>2, ":A"))
            and not (value(\1, "|de|d’|") and value(<1, "|un|une|"))
        -4>> =suggPlur(\4)                                                                          && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel.

TEST: ces {{beaux}} {{institutions}}
TEST: nos petites {{fille}}
TEST: de plusieurs {{grands}} {{avocates}}
TEST: de vos défauts {{terrible}}, je connais presque tout.
TEST: Les éléments caractéristiques liés à ses valeurs historique et architecturale
................................................................................


__gn_det_plur_3m__
    [ces|mes|tes|ses|nos|vos|quels|quelles|aux]             *WORD  *WORD  *WORD
    [plusieurs|quelques|certains|certaines|moult]           *WORD  *WORD  *WORD
    [lesdits|lesdites|desdits|desdites|auxdits|auxdites]    *WORD  *WORD  *WORD
        <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:[pi]", ":(?:[123][sp]|G)")
            and morph(\4, ":[NA].*:s", "*") and \4.islower() and not before("(?i)\\bune? de +$") and not morph(\4, ">seul/")
        -4>> =suggPlur(\4)                                                                  && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au pluriel.

    leurs  *WORD  *WORD  *WORD
        <<- /gn/ morph(\2, ":[NA].*:[pi]", "[123][sp]") and morph(\3, ":[NA].*:[pi]", ":(?:[123][sp]|G)")
            and morph(\4, ":[NA].*:s", "*") and not before("(?i)\\bune? de +$") and not morph(\4, ">seul/")
        -4>> =suggPlur(\4)                                                                  && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au pluriel.

TEST: ces petites sottes {{déjantée}}
TEST: Leurs grands plans {{dépassé}} par les évènements
TEST: Prendre goût aux heures passées seul à marcher


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

TEST: {{Quels}} que soient ces idiotes                        ->> Quelles
TEST: {{Quels}} qu’en soient les raisons                      ->> Quelles


__gn_det_mas_plur_2m__
    [certains|quels|lesdits|desdits|auxdits]  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:[me]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:f", "*") and not apposition(\2, \3)
        -3>> =suggMasPlur(\3, True)                                                         && Accord de genre erroné : « \2 » est masculin, « \3 » est féminin.
        <<- /gn/ morph(\2, ":[NA].*:[pi]", ":G") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
        -3>> =suggMasPlur(\3)                                                               && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.

    [et|ou|de|d’]  [certains|quels|lesdits|desdits|auxdits]  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[me]", ":(?:B|G|V0|f)") and morph(\4, ":[NA].*:f", "*") and not apposition(\3, \4)
        -4>> =suggMasPlur(\4, True)                                                         && Accord de genre erroné : « \3 » est masculin, « \4 » est féminin.
        <<- /gn/ morph(\3, ":[NA].*:[pi]", ":G") and morph(\4, ":[NA].*:s", "*") and not apposition(\3, \4) and not (value(>1, "|et|,|") and morph(>2, ":A"))
            and not (value(\1, "|de|d’|") and value(<1, "|un|une|"))
        -4>> =suggMasPlur(\4)                                                               && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel.

TEST: certains claviers {{dégueulasse}}
TEST: certains hommes {{petite}}
TEST: auxdits hommes {{connu}}
TEST: quels hommes {{grandes}}
TEST: elle se rappelle de quels rapports {{désastreuses}} il s’agit.
TEST: de quels grands {{fou}} s’agit-il ?
TEST: chez certains la revue Limite provoque des crises d’hystérie.


__gn_det_fem_plur_2m__
    [certaines|quelles|lesdites|desdites|auxdites]  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|de|d’|") and not morph(\3, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:[fe]", ":(?:B|G|V0)") and morph(\3, ":[NA].*:m", "*") and not apposition(\2, \3)
        -3>> =suggFemPlur(\3, True)                                                         && Accord de genre erroné : « \2 » est féminin, « \3 » est masculin.
        <<- /gn/ morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:s", "*") and not apposition(\2, \3) and not (value(>1, "|et|,|") and morph(>2, ":A"))
        -3>> =suggFemPlur(\3)                                                               && Accord de nombre erroné avec « \1 \2 » : « \3 » devrait être au pluriel.

    [et|ou|de|d’]  [certaines|quelles|lesdites|desdites|auxdites]  *WORD  *WORD
        <<- /gn/ not morph(<1, ":[NA]|>(?:et|ou)/") and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\3, ":[NA].*:[fe]", ":(?:B|G|V0|m)") and morph(\4, ":[NA].*:m", "*") and not apposition(\3, \4)
        -4>> =suggFemPlur(\4, True)                                                         && Accord de genre erroné : « \3 » est féminin, « \4 » est masculin.
        <<- /gn/ morph(\3, ":[NA].*:[pi]") and morph(\4, ":[NA].*:s", "*") and not apposition(\3, \4) and not (value(>1, "|et|,|") and morph(>2, ":A"))
            and not (value(\1, "|de|d’|") and value(<1, "|un|une|"))
        -4>> =suggFemPlur(\4)                                                               && Accord de nombre erroné avec « \2 \3 » : « \4 » devrait être au pluriel.

TEST: certaines idioties {{stupide}}
TEST: quelles grandes {{idiots}}
TEST: je ne sais guère de quelles âneries {{proférés}} on parle.
TEST: quelles étonnantes {{petits}}
TEST: ici ou auxdites lointaines {{contrée}}
................................................................................

    [certains|certaines|plusieurs|quelques-uns|quelques-unes] d’ entre nous
        <<- /1>> _d_entre_nous_

    [certains|certaines|plusieurs|quelques-uns|quelques-unes] d’ entre vous
        <<- /1>> _d_entre_vous_


    [aucun|aucune] des *WORD [ne|n’]
        <<- ~2:3>> *

    [aucun|aucune] des *WORD *WORD [ne|n’]
        <<- ~2:4>> *

    beaucoup [de|d’] *WORD <end>
    beaucoup [de|d’] *WORD ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|y|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|iel|iels|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    beaucoup [de|d’] *WORD @:[VR]¬:[NAP]
    beaucoup [de|d’] *WORD , @¬:[NA]
        <<- morph(\3, ":[NA].*:p", ":(?:[NA].*:[si]|G)") /1>> _bcp_plur_
        <<- __else__ and morph(\3, ":[NA].*:s", ":(?:[NA].*:[pi]|G)") /1>> _bcp_sing_
        <<- ~2:3>> *

    la plupart des *WORD <end>
    la plupart des *WORD ?,¿ [ne|n’|me|m’|te|t’|se|s’|nous|vous|y|c’|ça|ç’|je|j’|tu|il|elle|on|ils|elles|iel|iels|le|la|l’|les|mon|ma|ta|sa|notre|votre|leur|mes|tes|ses|nos|vos|leurs|ce|cet|cette|ces|quel|quels|quelle|quelles]
    la plupart des *WORD @:[VR]¬:[NAP]
    la plupart des *WORD , @¬:[NA]
        <<- ~3:4>> *
................................................................................
    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_à_verbeétat_)   à  ?[ne|n’]¿ ?[en|y]¿       /_LVEF_verbe_à_verbeétat_   *WORD
    [<start>|,|$:Cs]  [l’|mon|ton|son|notre|votre|leur] (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_de_verbeétat_)  [de|d’] ?[ne|n’]¿ ?[en|y]¿  /_LVEF_verbe_de_verbeétat_  *WORD
        <<- /ppas/ not value(\-1, "|légion|néant|réalité|") and
            ((morph(\1, ":[NA].*:f", ":[GWme]") and morph(\-1, ":A.*:m", ":[GWMfe]")) or (morph(\1, ":[NA].*:m", ":[GWfe]") and morph(\-1, ":A.*:f", ":[GWme]")))
            and (morph(\2, ":[123]s") or (not tag(\1, "_enum_") and morph(\2, ":P")))
        --1>> =switchGender(\-1)                                                                    && Accord erroné : “\1” et “\-1” ne sont pas accordés en genre.

    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|$:B]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre])                   *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|$:B]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (>avoir) [été|semblé|paru]                                                                     *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|$:B]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  ([>être|>sembler])  [devenus|redevenus|restés|demeurés|devenues|redevenues|restées|demeurées]  *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|$:B]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_verbeétat_)     ?[en|y]¿                    /_LVEF_verbe_verbeétat_              *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|$:B]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_être_ppas_)     ?[en|y]¿  être              /_LVEF_verbe_être_ppas_              *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|$:B]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_avoir_ppas_)    ?[en|y]¿  avoir             /_LVEF_verbe_avoir_ppas_             *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|$:B]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_à_verbeétat_)   à  ?[ne|n’]¿ ?[en|y]¿       /_LVEF_verbe_à_verbeétat_            *WORD
    [<start>|,|$:Cs]  [les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|$:B]  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_de_verbeétat_)  [de|d’] ?[ne|n’]¿ ?[en|y]¿  /_LVEF_verbe_de_verbeétat_           *WORD
        <<- /ppas/ not value(\-1, "|légion|néant|réalité|") and
            ((morph(\1, ":[NA].*:f", ":[GWme]") and morph(\-1, ":A.*:m", ":[GWMfe]")) or (morph(\1, ":[NA].*:m", ":[GWfe]") and morph(\-1, ":A.*:f", ":[GWme]"))) and morph(\2, ":(?:[123]p|P)")
        --1>> =switchGender(\-1)                                                                    && Accord erroné : “\1” et “\-1” ne sont pas accordés en genre.

    [<start>|,|$:Cs]  certains  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre])                   *WORD
    [<start>|,|$:Cs]  certains  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (>avoir) [été|semblé|paru]                                                                     *WORD
    [<start>|,|$:Cs]  certains  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  ([>être|>sembler])  [devenus|redevenus|restés|demeurés]                                        *WORD
    [<start>|,|$:Cs]  certains  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_verbeétat_)     ?[en|y]¿                    /_LVEF_verbe_verbeétat_              *WORD
    [<start>|,|$:Cs]  certains  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_être_ppas_)     ?[en|y]¿  être              /_LVEF_verbe_être_ppas_              *WORD
    [<start>|,|$:Cs]  certains  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_avoir_ppas_)    ?[en|y]¿  avoir             /_LVEF_verbe_avoir_ppas_             *WORD
    [<start>|,|$:Cs]  certains  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_à_verbeétat_)   à  ?[ne|n’]¿ ?[en|y]¿       /_LVEF_verbe_à_verbeétat_            *WORD
    [<start>|,|$:Cs]  certains  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_de_verbeétat_)  [de|d’] ?[ne|n’]¿ ?[en|y]¿  /_LVEF_verbe_de_verbeétat_           *WORD
        <<- /ppas/ not value(\-1, "|légion|néant|réalité|") and morph(\1, ":[NA].*:[me]:[pi]", ":[GWfe]") and morph(\-1, ":A.*:f", ":[GWme]") and morph(\2, ":(?:[123]p|P)")
        --1>> =switchGender(\-1)                                                                    && Accord erroné : “\1” et “\-1” ne sont pas accordés en genre.

    [<start>|,|$:Cs]  certaines  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre])                   *WORD
    [<start>|,|$:Cs]  certaines  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (>avoir) [été|semblé|paru]                                                                     *WORD
    [<start>|,|$:Cs]  certaines  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  ([>être|>sembler])  [devenues|redevenues|restées|demeurées]                                    *WORD
    [<start>|,|$:Cs]  certaines  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_verbeétat_)     ?[en|y]¿                    /_LVEF_verbe_verbeétat_              *WORD
    [<start>|,|$:Cs]  certaines  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_être_ppas_)     ?[en|y]¿  être              /_LVEF_verbe_être_ppas_              *WORD
    [<start>|,|$:Cs]  certaines  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_avoir_ppas_)    ?[en|y]¿  avoir             /_LVEF_verbe_avoir_ppas_             *WORD
    [<start>|,|$:Cs]  certaines  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_à_verbeétat_)   à  ?[ne|n’]¿ ?[en|y]¿       /_LVEF_verbe_à_verbeétat_            *WORD
    [<start>|,|$:Cs]  certaines  (*WORD)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  (/_LVED_verbe_de_verbeétat_)  [de|d’] ?[ne|n’]¿ ?[en|y]¿  /_LVEF_verbe_de_verbeétat_           *WORD
        <<- /ppas/ not value(\-1, "|légion|néant|réalité|") and morph(\1, ":[NA].*:[fe]:[pi]", ":[GWme]") and morph(\-1, ":A.*:m", ":[GWfe]") and morph(\2, ":(?:[123]p|P)")
        --1>> =switchGender(\-1)                                                                    && Accord erroné : “\1” et “\-1” ne sont pas accordés en genre.

    *WORD  [que|qu’]  [un|le|ce|cet|une|la|ma|ta|sa|cette|l’|mon|ton|son|notre|votre|leur|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|$:B]  *WORD  ?[ne|n’]¿  ?[en|y]¿
        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
        || [être|devenir|redevenir|rester|paraître|paraitre|sembler]                                *WORD
    *WORD  [que|qu’]  [un|le|ce|cet|une|la|ma|ta|sa|cette|l’|mon|ton|son|notre|votre|leur|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|$:B]  *WORD  ?[ne|n’]¿  ?[en|y]¿
        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
        || être [devenu+e|redevenu+e|resté+e|demeuré+e]                                             *WORD
    *WORD  [que|qu’]  [un|le|ce|cet|une|la|ma|ta|sa|cette|l’|mon|ton|son|notre|votre|leur|les|ces|mes|tes|ses|nos|vos|leurs|quelques|plusieurs|$:B]  *WORD  ?[ne|n’]¿  ?[en|y]¿
        || ([>affirmer|>croire|>déclarer|>désirer|>détester|>dire|>estimer|>imaginer|>penser|>préférer|>savoir|>souhaiter|>vouloir])
        || avoir [été|semblé|paru]                                                                  *WORD
        <<- /ppas/ checkAgreement(\1, \-1) !-1>>

TEST: Un orage est {{annoncée}}.
TEST: ce chat ne sera pas {{euthanasiée}}
TEST: Le chien qui n’y sera pas {{traitée}}
................................................................................
TEST: cette carte qui n’y sera jamais {{retrouvé}} à temps
TEST: Ma mémoire qui a aussi été {{effacé}}.
TEST: Sa femme qui ne paraît pas avoir été {{choqué}}
TEST: l’avenir de la région paraissait {{suspendue}} à ce financement
TEST: l’idiot qui n’y affirmait pas être devenu {{géniale}} mais seulement moins ignorant
TEST: Mon ami qui pensait être {{suivie}}
TEST: l’écolier qui ne croyait pas avoir été {{brillante}}
TEST: les femmes sont vraiment {{partis}}                                                   ->> parties
TEST: les hommes n’en sont pas tout à fait {{fâchées}}                                      ->> fâchés
TEST: plusieurs invités qui n’en sont pas {{contentes}}
TEST: les réunions sans cesse reportées qui sont {{annulés}}
TEST: les hommes croyant être {{instruites}}
TEST: deux estimations ont été {{reçus}}                                                    ->> reçues
TEST: certains hommes croient avoir été {{dupées}}                                          ->> dupés
TEST: certains hommes qui pensent être plus {{instruites}} qu’ils ne sont réellement        ->> instruits
TEST: puisque certains hommes n’en pensent pas moins être {{trompées}}                      ->> trompés
TEST: certains hommes qui n’en pensent pas devenir {{folles}} pour autant                   ->> fous
TEST: certaines femmes pensent avoir été {{trompés}}                                        ->> trompées
TEST: certaines femmes ne croient pas être {{appauvris}}                                    ->> appauvries
TEST: certaines femmes qui y pensent être {{escroqués}}                                     ->> escroquées
TEST: certaines femmes qui n’en risquent pas moins d’être {{découverts}}                    ->> découvertes
TEST: Les tortures que ce journaliste pense être “normales”.
TEST: La première était René, le parfumeur, qui s’approcha de Catherine
TEST: les abrutis sont légion


__ppas_nom_propre_être_accord_genre__
    [<start>|,|$:Cs]  ($:M)  ?qui¿  ?[ne|n’]¿  ?[en|y]¿  ([>être|>sembler|>devenir|>rester|>demeurer|>redevenir|>paraître|>paraitre])          *WORD
................................................................................
TEST: Mais parmi les millions de causes à défendre, lesquelles choisir ?
TEST: les failles par lesquelles entrait l’eau étaient impossibles à boucher.


__conj_beaucoup__
    beaucoup    @:V¬:(?:P|Q|G|Y)
        <<- /conj/ not morph(<1, ":[VR]") >>>
        <<- /conj/ tag(\1, "_bcp_plur_") and not morph(\2, ":3p")
        -2>> =suggVerb(\2, ":3p")                                   && Conjugaison erronée. Accord avec “\1”. Le substantif suivant étant au pluriel, le verbe devrait être à la 3ᵉ personne du pluriel.
        <<- /conj/ __else__ and tag(\1, "_bcp_sing_") and not morph(\2, ":3s")
        -2>> =suggVerb(\2, ":3s")                                   && Conjugaison erronée. Accord avec “\1”. Le substantif suivant étant au singulier, le verbe devrait être à la 3ᵉ personne du singulier.
        <<- /conj/ __else__ and \2 != "a" and not tag(\1, "_bcp_sing_") and not morph(\2, ":3p") and not (space_after(\1, 1, 2) and morph(\2, ":V0"))
        -2>> =suggVerb(\2, ":3p")                                   && Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du pluriel.

    beaucoup    qui  @:V¬:(?:3p|P|G)
        <<- /conj/ -3>> =suggVerb(\3, ":3p")                        && Conjugaison erronée. Accord avec “\1”. Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: beaucoup {{vienne}}
TEST: Beaucoup d’hommes y {{était}}.