Grammalecte  Check-in [c642359726]

Overview
Comment:[fr] ajustements et nouvelles règles
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr
Files: files | file ages | folders
SHA3-256: c642359726f5583ba591f29103b3ce86cd9ae9352305c9ba4e6d8a5d8d3da24f
User & Date: olr on 2021-01-02 22:51:42
Other Links: manifest | tags
Context
2021-01-04
18:56
[fr] ajustements et faux positifs check-in: 7cb6782e0a user: olr tags: fr, trunk
2021-01-02
22:51
[fr] ajustements et nouvelles règles check-in: c642359726 user: olr tags: fr, trunk
17:25
[core] tests: test suggestions without order check-in: 2f0c89c885 user: olr tags: core, trunk
Changes

Modified gc_lang/fr/rules.grx from [81b061fa47] to [e433e5fe10].

14436
14437
14438
14439
14440
14441
14442
14443
14444
14445
14446
14447
14448
14449
14450
.....
14569
14570
14571
14572
14573
14574
14575
14576
14577
14578
14579
14580
14581
14582
14583
14584
14585
14586
14587
14588
14589
14590
14591
14592
14593
14594
14595
14596
14597
14598
14599
14600
14601
14602
14603
14604
14605
14606
14607
14608
.....
14620
14621
14622
14623
14624
14625
14626
14627
14628
14629
14630
14631
14632
14633
14634
14635
14636
.....
18248
18249
18250
18251
18252
18253
18254
18255
18256
18257
18258
18259
18260
18261
18262
.....
22975
22976
22977
22978
22979
22980
22981






































22982
22983
22984
22985
22986
22987
22988
.....
23050
23051
23052
23053
23054
23055
23056


















23057
23058
23059
23060
23061
23062
23063
.....
23086
23087
23088
23089
23090
23091
23092
23093
23094
23095
23096
23097
23098
23099
23100
.....
23127
23128
23129
23130
23131
23132
23133


















23134
23135
23136
23137
23138
23139
23140
.....
23195
23196
23197
23198
23199
23200
23201





































23202
23203
23204
23205
23206
23207
23208
.....
23452
23453
23454
23455
23456
23457
23458


















23459
23460
23461
23462
23463
23464
23465
23466
23467
23468
23469
23470
23471
23472
.....
23555
23556
23557
23558
23559
23560
23561


















23562
23563
23564
23565
23566
23567
23568
.....
23599
23600
23601
23602
23603
23604
23605
23606
23607
23608
23609
23610
23611
23612
23613
23614
23615
23616
23617
23618
23619





































23620
23621
23622
23623
23624
23625
23626
        <<- /gn/ -3>> =suggMasPlur(\3, True)                                                        && Accord avec “tous” : “\3” devrait être au masculin pluriel.

    tous  @:[NA].*:[fs]¬:(?:W|V0|G|M|Y|P|3[sp]|[me]:[ip])
        <<- /gn/ morph(<1, ":R") -2>> =suggMasPlur(\2, True)                                        && Accord avec “tous” : “\2” devrait être au masculin pluriel.

TEST: tous {{fou}} à lier                                                               ->> fous
TEST: De tous {{âge}} !                                                                 ->> âges
TEST: par tous {{homme}} capable de comprendre                                          ->> hommes
TEST: l’existence d’un enseignement supérieur public, peu onéreux et ouvert à tous est d’une importance cruciale.
TEST: la survie de tous est plus importante que les profits de quelques-uns
TEST: tous ayant souffert du supplice de séjourner derrière les barreaux


__gn_toute_nom__
    [<start>|,|(]   toute  @:[NA].*:[mp]¬:(?:W|P|G|V0|M|[fe]:[is])
................................................................................

!!
!!
!!!! Infinitif                                                                                    !!
!!
!!

__infi_ne_pas_jamais_etc__
    ne ?[presque|presqu’]¿ [pas|rien|guère|point] ?[trop|beaucoup]¿ ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ [pas|rien|guère|point] non plus          ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ jamais ?[rien|plus|trop|beaucoup]¿       ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ jamais ?[rien|plus]¿ non plus            ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ plus ?[jamais|rien|guère|trop|beaucoup]¿ ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ plus ?[jamais|rien|guère]¿ non plus      ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ [pas|rien|guère|point] ?[trop|beaucoup]¿ [m’|t’|s’|nous|vous|les|lui|leur|l’]  [en|y]                @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ [pas|rien|guère|point] non plus          [m’|t’|s’|nous|vous|les|lui|leur|l’]  [en|y]                @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ jamais ?[rien|plus|trop|beaucoup]¿       [m’|t’|s’|nous|vous|les|lui|leur|l’]  [en|y]                @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ jamais ?[rien|plus]¿ non plus            [m’|t’|s’|nous|vous|les|lui|leur|l’]  [en|y]                @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ plus ?[jamais|rien|guère|trop|beaucoup]¿ [m’|t’|s’|nous|vous|les|lui|leur|l’]  [en|y]                @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ plus ?[jamais|rien|guère]¿ non plus      [m’|t’|s’|nous|vous|les|lui|leur|l’]  [en|y]                @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ [pas|rien|guère|point] ?[trop|beaucoup]¿ [me|te|nous|vous] [le|la|les]                               @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ [pas|rien|guère|point] non plus          [me|te|nous|vous] [le|la|les]                               @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ jamais ?[rien|plus|trop|beaucoup]¿       [me|te|nous|vous] [le|la|les]                               @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ jamais ?[rien|plus]¿ non plus            [me|te|nous|vous] [le|la|les]                               @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ plus ?[jamais|rien|guère|trop|beaucoup]¿ [me|te|nous|vous] [le|la|les]                               @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ plus ?[jamais|rien|guère]¿ non plus      [me|te|nous|vous] [le|la|les]                               @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ [pas|rien|guère|point] ?[trop|beaucoup]¿ [le|la|les] [lui|leur]                                      @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ [pas|rien|guère|point] non plus          [le|la|les] [lui|leur]                                      @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ jamais ?[rien|plus|trop|beaucoup]¿       [le|la|les] [lui|leur]                                      @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ jamais ?[rien|plus]¿ non plus            [le|la|les] [lui|leur]                                      @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ plus ?[jamais|rien|guère|trop|beaucoup]¿ [le|la|les] [lui|leur]                                      @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
    ne ?[presque|presqu’]¿ plus ?[jamais|rien|guère]¿ non plus      [le|la|les] [lui|leur]                                      @:[VNA]¬:(?:Y|W|X|O[vwn])|>que/
        <<- /infi/ --1>> =suggVerbInfi(\-1)                                                         && Après “ne pas”, “ne jamais”, “ne plus”, “ne rien”… le verbe devrait être à l’infinitif.

    n’ [en|y] ?[presque|presqu’]¿ [pas|rien|guère|point] ?[trop|beaucoup]¿      @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ [pas|rien|guère|point] non plus               @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ jamais ?[rien|plus|trop|beaucoup]¿            @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ jamais ?[rien|plus]¿ non plus                 @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ plus ?[jamais|rien|guère|trop|beaucoup]¿      @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ plus ?[jamais|rien|guère]¿ non plus           @:[VNA]¬:(?:Y|W|X|O[vwn])
................................................................................
    n’ [en|y] ?[presque|presqu’]¿ plus ?[jamais|rien|guère]¿ non plus           @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ [pas|rien|guère|point] ?[trop|beaucoup]¿      @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ [pas|rien|guère|point] non plus               @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ jamais ?[rien|plus|trop|beaucoup]¿            @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ jamais ?[rien|plus]¿ non plus                 @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ plus ?[jamais|rien|guère|trop|beaucoup]¿      @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ plus ?[jamais|rien|guère]¿ non plus           @:[VNA]¬:(?:Y|W|X|O[vwn])
        <<- /infi/ --1>> =suggVerbInfi(\-1)                                                         && Après “ne pas”, “ne jamais”, “ne plus”, “ne rien”… le verbe devrait être à l’infinitif.

    ne [pas|jamais|plus|rien|guère|point] [beaucoup|trop|assez|mal]
        <<- ~3>> *

TEST: ne jamais les {{cédé}}                                                ->> céder
TEST: ne point nous {{donné}}                                               ->> donner
TEST: ne rien {{finit}}                                                     ->> finir
TEST: ne jamais plus s’y {{frottait}}                                       ->> frotter
TEST: ne presque jamais plus s’y {{frottaient}}                             ->> frotter
................................................................................
    >sonnette d’ alarme
    >sortie [de|d’] secours
    >soue à >cochon
    >sourate [*NUM|$:B] ?,¿ verset [*NUM|$:B]
    >sourire [de|d’] [complaisance|connivence|contentement|convenance]
    >souvenir d’ enfance
    >star du x
    >station [de|d’] radio
    >sujet [de|d’] [prédilection|préoccupation]
    >suspension [de|d’] séance
    >syndicat du crime
    >système d’ exploitation
    >système [de|d’] santé
    >système D
    >tabac à [chicha|chiquer|mâcher|priser|rouler|rouler]
................................................................................
        <<- /gn/ __else__ and morph(\2, ":[NA].*:[si]", "*") and morph(\3, ":[NA].*:[si]", ":(?:[123][sp]|G|P|B)|;C") and morph(\4, ":[NA].*:p", "*")
        -4>> =suggSing(\4)                                                                  && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au singulier.

TEST: l’horreur obscure {{répandu}} dans les ténèbres                               ->> répandue
TEST: l’honneur français {{bafouée}}                                                ->> bafoué
TEST: l’ignoble ignorance si {{répandues}}                                          ->> répandue








































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

TEST: le roi chrétien {{tyranniques}} tout pétri de son prétendu droit divin                    ->> tyrannique
TEST: le petit chien {{bruns}}                                                                  ->> brun
TEST: elles furent le jour venu prises par surprise, et elles durent s’enfuir.
TEST: qu’ils fassent tourner le système économique, assez concrètement, mais sans faire chier avec leurs petits problèmes de gens de rien.
TEST: avec le peuple, contre le capitalisme mortifère sous tous ses visages.




















__gn_la_1m__
    ,  la  *WORD
        <<- /gn/ morph(\3, ":[NA].*:m", ":(?:e|f|P|G|W|M|[1-3][sp]|Y)") -2>> le             && Accord de genre erroné : « \3 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\3) -3>> =suggFemSing(\3, True)                    && Accord de genre erroné : « \2 » est un déterminant féminin.
        <<- /gn/ __else__ and morph(\3, ":[NA].*:p") -3>> =suggFemSing(\3)                  && Accord de nombre erroné : « \3 » devrait être au singulier.

................................................................................
TEST: la {{vilénies}} des mensonges                             ->> vilénie
TEST: de {{la}} vin                                             ->> le
TEST: {{la}} {{véhicule}}                                       ->> le|||véhiculée
TEST: {{La}} {{pris}}                                           ->> Le|||prise
TEST: {{Le}} {{commandeuse}}                                    ->> La|||commandeur
TEST: {{Le}} {{commanderesse}}                                  ->> La|||commandeur
TEST: {{le}} {{doctoresse}} est là.                             ->> la|||docteur
TEST: la force de la {{formes}} parfaite                        ->> forme
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
................................................................................
        -4>> =suggFemSing(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au féminin singulier.

TEST: la seule solution {{trouvé}} consistait à déléguer                                        ->> trouvée
TEST: La petite fille {{devenues}} infirmière.                                                  ->> devenue
TEST: sous la forme d’un baromètre comparant différents moyens pour alléger ses émissions
TEST: non seulement met en péril la logique industrielle mais contribue à détruire peu à peu le substrat sur lequel repose le marché lui-même, à savoir la société des hommes.




















__gn_leur_1m__
    ,  leur  *WORD
        <<- /gn/ morph(\3, ":[NA].*:p", "*") -2>> leurs                                     && Accord de nombre erroné avec « \3 ».
        <<- /gn/ __also__ -3>> =suggSing(\3)                                                && Accord de nombre erroné : « \3 » devrait être au singulier.

    *WORD  leur  *WORD
................................................................................
        <<- /gn/ __else__ and morph(\2, ":[NA].*:[si]", "*") and morph(\3, ":[NA].*:[si]", ":(?:[123][sp]|G|P|B)|;C") and morph(\4, ":[NA].*:p", "*")
        -4>> =suggSing(\4)                                                                  && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au singulier.

TEST: leur grande passion {{délirants}} pour le cosplay.                            ->> délirante
TEST: leur noir projet {{ignorées}} du peuple                                       ->> ignoré
TEST: leur psychologue altruiste {{détestés}} par ses voisins                       ->> détesté







































__gn_ledit_1m__
    ledit  *WORD
        <<- /gn/ morph(\2, ":[NA].*:f", ":[GWme]") -1>> ladite                              && Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True)                    && Accord de genre erroné : « \1 » est un déterminant masculin.
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggMasSing(\2)                    && Accord de nombre erroné : « \2 » devrait être au singulier.

................................................................................
        -4>> =suggMasSing(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au masculin singulier.

TEST: ledit martyr oublié {{réhabilitée}}                                       ->> réhabilité
TEST: un gros connard {{pathétiques}}                                           ->> pathétique
TEST: servi pas un style et une exigence historique remarquables
TEST: ils eurent besoins d’au minimum cent ans pour s’en remettre




















__gn_mon_ton_son_1m__
    [mon|ton|son]  *WORD
        <<- /gn/ morph(\1, ":D") >>>
        <<- /gn/ morph(\2, ">[bcçdfgjklmnpqrstvwxz].*:[NA].*:f", ":[GWme]") -1>> =\1.replace("on", "a").replace("ON", "A")     && Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True)                    && Accord de genre erroné : « \1 » est un déterminant masculin.
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggMasSing(\2)                    && Accord de nombre erroné : « \2 » devrait être au singulier.

TEST: mon {{excellentes}} mémoire                                               ->> excellente
TEST: {{ton}} {{belle}} mémoire                                                 ->> ta|||beau
TEST: {{mon}} {{chienne}}                                                       ->> ma|||chien


__gn_mon_ton_son_2m__
................................................................................
__gn_det_fem_sing_3m__
    [ladite|une|cette|ma|ta|sa|quelle|aucune|nulle]  *WORD  *WORD  *WORD
        <<- /gn/ morph(<1, "<start>|:V", "*") and morph(\2, ":[NA].*:[fe]:[si]") and morph(\3, ":[NA].*:[fe]:[si]", ":(?:[123][sp]|G|P|B)|;C") and morph(\4, ":[NA].*:[pm]", "*") and \4.islower()
        -4>> =suggFemSing(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au féminin singulier.

TEST: une amie prodigieuse {{récompensé}}                                       ->> récompensée




















__gn_notre_votre_chaque_1m__
    [notre|votre|chaque]  *WORD
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggSing(\2)                       && Accord de nombre erroné : « \2 » devrait être au singulier.

TEST: Chaque {{chiens}}.                                                        ->> chien

................................................................................
TEST: ils viennent de chaque coin {{ignorée}} du pays.                          ->> ignoré
TEST: que faire de votre {{ennuyeuse}} {{avocat}}                               ->> ennuyeux|||avocate
TEST: de quelque cartable {{vides}}                                             ->> vide
TEST: de notre petit {{amis}}                                                   ->> ami
TEST: Quelque chose tombé dans le puits a souillé l’eau.


__gn_det_notre_votre_3m__
    [chaque|quelque|notre|votre]  *WORD  *WORD  *WORD
        <<- /gn/ morph(<1, "<start>|:V", "*") and \4.islower() >>>
        <<- /gn/ morph(\2, ":[NA].*:m:[si]", ":[fe]") and morph(\3, ":[NA].*:[me]:[si]", ":(?:[123][sp]|G|P|B)|;C") and morph(\4, ":[NA].*:f", "*")
        -4>> =suggMasSing(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au masculin singulier.
        <<- /gn/ __else__ and morph(\2, ":[NA].*:f:[si]", ":[me]") and morph(\3, ":[NA].*:[fe]:[si]", ":(?:[123][sp]|G|P|B)|;C") and morph(\4, ":[NA].*:m", "*")
        -4>> =suggFemSing(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au féminin singulier.
        <<- /gn/ __else__ and morph(\2, ":[NA].*:[si]", ":[fe]") and morph(\3, ":[NA].*:[me]:[si]", ":(?:[123][sp]|G|P|B)|;C") and morph(\4, ":[NA].*:p", "*")
        -4>> =suggSing(\4)                                                                  && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au singulier.

TEST: notre grande armée {{fabuleux}}                                           ->> fabuleuse
TEST: notre supérieur hiérarchique {{ignorante}} des pratiques                  ->> ignorant
TEST: votre petit test {{minables}}                                             ->> minable







































## Pluriels

__gn_les_1m__
    ,  les  *WORD
        <<- /gn/ morph(\3, ":[NA].*:s", "*") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))
        -3>> =suggPlur(\3)                                                                  && Accord de nombre erroné : « \3 » devrait être au pluriel.







|







 







|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|







 







|

|







 







|







 







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







 







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







 







|







 







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







 







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







 







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






|







 







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







 







|













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







14436
14437
14438
14439
14440
14441
14442
14443
14444
14445
14446
14447
14448
14449
14450
.....
14569
14570
14571
14572
14573
14574
14575
14576
14577
14578
14579
14580
14581
14582
14583
14584
14585
14586
14587
14588
14589
14590
14591
14592
14593
14594
14595
14596
14597
14598
14599
14600
14601
14602
14603
14604
14605
14606
14607
14608
.....
14620
14621
14622
14623
14624
14625
14626
14627
14628
14629
14630
14631
14632
14633
14634
14635
14636
.....
18248
18249
18250
18251
18252
18253
18254
18255
18256
18257
18258
18259
18260
18261
18262
.....
22975
22976
22977
22978
22979
22980
22981
22982
22983
22984
22985
22986
22987
22988
22989
22990
22991
22992
22993
22994
22995
22996
22997
22998
22999
23000
23001
23002
23003
23004
23005
23006
23007
23008
23009
23010
23011
23012
23013
23014
23015
23016
23017
23018
23019
23020
23021
23022
23023
23024
23025
23026
.....
23088
23089
23090
23091
23092
23093
23094
23095
23096
23097
23098
23099
23100
23101
23102
23103
23104
23105
23106
23107
23108
23109
23110
23111
23112
23113
23114
23115
23116
23117
23118
23119
.....
23142
23143
23144
23145
23146
23147
23148
23149
23150
23151
23152
23153
23154
23155
23156
.....
23183
23184
23185
23186
23187
23188
23189
23190
23191
23192
23193
23194
23195
23196
23197
23198
23199
23200
23201
23202
23203
23204
23205
23206
23207
23208
23209
23210
23211
23212
23213
23214
.....
23269
23270
23271
23272
23273
23274
23275
23276
23277
23278
23279
23280
23281
23282
23283
23284
23285
23286
23287
23288
23289
23290
23291
23292
23293
23294
23295
23296
23297
23298
23299
23300
23301
23302
23303
23304
23305
23306
23307
23308
23309
23310
23311
23312
23313
23314
23315
23316
23317
23318
23319
.....
23563
23564
23565
23566
23567
23568
23569
23570
23571
23572
23573
23574
23575
23576
23577
23578
23579
23580
23581
23582
23583
23584
23585
23586
23587
23588
23589
23590
23591
23592
23593
23594
23595
23596
23597
23598
23599
23600
23601
.....
23684
23685
23686
23687
23688
23689
23690
23691
23692
23693
23694
23695
23696
23697
23698
23699
23700
23701
23702
23703
23704
23705
23706
23707
23708
23709
23710
23711
23712
23713
23714
23715
.....
23746
23747
23748
23749
23750
23751
23752
23753
23754
23755
23756
23757
23758
23759
23760
23761
23762
23763
23764
23765
23766
23767
23768
23769
23770
23771
23772
23773
23774
23775
23776
23777
23778
23779
23780
23781
23782
23783
23784
23785
23786
23787
23788
23789
23790
23791
23792
23793
23794
23795
23796
23797
23798
23799
23800
23801
23802
23803
23804
23805
23806
23807
23808
23809
23810
        <<- /gn/ -3>> =suggMasPlur(\3, True)                                                        && Accord avec “tous” : “\3” devrait être au masculin pluriel.

    tous  @:[NA].*:[fs]¬:(?:W|V0|G|M|Y|P|3[sp]|[me]:[ip])
        <<- /gn/ morph(<1, ":R") -2>> =suggMasPlur(\2, True)                                        && Accord avec “tous” : “\2” devrait être au masculin pluriel.

TEST: tous {{fou}} à lier                                                               ->> fous
TEST: De tous {{âge}} !                                                                 ->> âges
TEST: par tous {{homme}} capable de comprendre                                          ->> hommes|ohms|heaumes
TEST: l’existence d’un enseignement supérieur public, peu onéreux et ouvert à tous est d’une importance cruciale.
TEST: la survie de tous est plus importante que les profits de quelques-uns
TEST: tous ayant souffert du supplice de séjourner derrière les barreaux


__gn_toute_nom__
    [<start>|,|(]   toute  @:[NA].*:[mp]¬:(?:W|P|G|V0|M|[fe]:[is])
................................................................................

!!
!!
!!!! Infinitif                                                                                    !!
!!
!!

__infi_ne_pas_jamais_etc!9__
    [ne|n’] ?[presque|presqu’]¿ [pas|rien|guère|point] ?[trop|beaucoup]¿ ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ [pas|rien|guère|point] non plus          ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ jamais ?[rien|plus|trop|beaucoup]¿       ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ jamais ?[rien|plus]¿ non plus            ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ plus ?[jamais|rien|guère|trop|beaucoup]¿ ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ plus ?[jamais|rien|guère]¿ non plus      ?[le|la|l’|les|leur|lui|nous|vous|me|m’|te|t’|se|s’|en|y]¿  @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ [pas|rien|guère|point] ?[trop|beaucoup]¿ [m’|t’|s’|nous|vous|les|lui|leur|l’]  [en|y]                @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ [pas|rien|guère|point] non plus          [m’|t’|s’|nous|vous|les|lui|leur|l’]  [en|y]                @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ jamais ?[rien|plus|trop|beaucoup]¿       [m’|t’|s’|nous|vous|les|lui|leur|l’]  [en|y]                @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ jamais ?[rien|plus]¿ non plus            [m’|t’|s’|nous|vous|les|lui|leur|l’]  [en|y]                @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ plus ?[jamais|rien|guère|trop|beaucoup]¿ [m’|t’|s’|nous|vous|les|lui|leur|l’]  [en|y]                @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ plus ?[jamais|rien|guère]¿ non plus      [m’|t’|s’|nous|vous|les|lui|leur|l’]  [en|y]                @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ [pas|rien|guère|point] ?[trop|beaucoup]¿ [me|te|nous|vous] [le|la|les]                               @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ [pas|rien|guère|point] non plus          [me|te|nous|vous] [le|la|les]                               @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ jamais ?[rien|plus|trop|beaucoup]¿       [me|te|nous|vous] [le|la|les]                               @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ jamais ?[rien|plus]¿ non plus            [me|te|nous|vous] [le|la|les]                               @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ plus ?[jamais|rien|guère|trop|beaucoup]¿ [me|te|nous|vous] [le|la|les]                               @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ plus ?[jamais|rien|guère]¿ non plus      [me|te|nous|vous] [le|la|les]                               @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ [pas|rien|guère|point] ?[trop|beaucoup]¿ [le|la|les] [lui|leur]                                      @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ [pas|rien|guère|point] non plus          [le|la|les] [lui|leur]                                      @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ jamais ?[rien|plus|trop|beaucoup]¿       [le|la|les] [lui|leur]                                      @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ jamais ?[rien|plus]¿ non plus            [le|la|les] [lui|leur]                                      @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ plus ?[jamais|rien|guère|trop|beaucoup]¿ [le|la|les] [lui|leur]                                      @:[VNA]¬:(?:Y|W|X|O[vwn])
    [ne|n’] ?[presque|presqu’]¿ plus ?[jamais|rien|guère]¿ non plus      [le|la|les] [lui|leur]                                      @:[VNA]¬:(?:Y|W|X|O[vwn])
        <<- /infi/ not value(\-1, "|guerre|guerres|") --1>> =suggVerbInfi(\-1)                      && Après “ne pas”, “ne jamais”, “ne plus”, “ne rien”… le verbe devrait être à l’infinitif.

    n’ [en|y] ?[presque|presqu’]¿ [pas|rien|guère|point] ?[trop|beaucoup]¿      @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ [pas|rien|guère|point] non plus               @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ jamais ?[rien|plus|trop|beaucoup]¿            @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ jamais ?[rien|plus]¿ non plus                 @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ plus ?[jamais|rien|guère|trop|beaucoup]¿      @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ plus ?[jamais|rien|guère]¿ non plus           @:[VNA]¬:(?:Y|W|X|O[vwn])
................................................................................
    n’ [en|y] ?[presque|presqu’]¿ plus ?[jamais|rien|guère]¿ non plus           @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ [pas|rien|guère|point] ?[trop|beaucoup]¿      @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ [pas|rien|guère|point] non plus               @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ jamais ?[rien|plus|trop|beaucoup]¿            @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ jamais ?[rien|plus]¿ non plus                 @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ plus ?[jamais|rien|guère|trop|beaucoup]¿      @:[VNA]¬:(?:Y|W|X|O[vwn])
    n’ [en|y] ?[presque|presqu’]¿ plus ?[jamais|rien|guère]¿ non plus           @:[VNA]¬:(?:Y|W|X|O[vwn])
        <<- /infi/ not value(\-1, "|guerre|guerres|") --1>> =suggVerbInfi(\-1)                      && Après “ne pas”, “ne jamais”, “ne plus”, “ne rien”… le verbe devrait être à l’infinitif.

    [ne|n’] [pas|jamais|plus|rien|guère|point] [beaucoup|trop|assez|mal]
        <<- ~3>> *

TEST: ne jamais les {{cédé}}                                                ->> céder
TEST: ne point nous {{donné}}                                               ->> donner
TEST: ne rien {{finit}}                                                     ->> finir
TEST: ne jamais plus s’y {{frottait}}                                       ->> frotter
TEST: ne presque jamais plus s’y {{frottaient}}                             ->> frotter
................................................................................
    >sonnette d’ alarme
    >sortie [de|d’] secours
    >soue à >cochon
    >sourate [*NUM|$:B] ?,¿ verset [*NUM|$:B]
    >sourire [de|d’] [complaisance|connivence|contentement|convenance]
    >souvenir d’ enfance
    >star du x
    >station [de|d’] [radio|ski]
    >sujet [de|d’] [prédilection|préoccupation]
    >suspension [de|d’] séance
    >syndicat du crime
    >système d’ exploitation
    >système [de|d’] santé
    >système D
    >tabac à [chicha|chiquer|mâcher|priser|rouler|rouler]
................................................................................
        <<- /gn/ __else__ and morph(\2, ":[NA].*:[si]", "*") and morph(\3, ":[NA].*:[si]", ":(?:[123][sp]|G|P|B)|;C") and morph(\4, ":[NA].*:p", "*")
        -4>> =suggSing(\4)                                                                  && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au singulier.

TEST: l’horreur obscure {{répandu}} dans les ténèbres                               ->> répandue
TEST: l’honneur français {{bafouée}}                                                ->> bafoué
TEST: l’ignoble ignorance si {{répandues}}                                          ->> répandue


__gn_l_3m_et__
    l’ *WORD et *WORD  @:[NA].*:m:s¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C") >>>
        <<- /gn/ morph(\2, ":A", ":A.*:[me]:[si]") -2>> =suggMasSing(\2)                            && Cet adjectif n’est pas accordé avec le nom “\-1”.
        <<- /gn/ morph(\4, ":A", ":A.*:[me]:[si]") -4>> =suggMasSing(\4)                            && Cet adjectif n’est pas accordé avec le nom “\-1”.
        <<- /gn/ morph(\2, ":A", ":A.*:[me]:[si]") and morph(\4, ":A", ":A.*:[me]:[si]")
        -5>> =suggFemSing(\5, True)                                                                 && Ce nom n’est pas accordé avec les adjectifs “\2” et “\4”.

    l’ *WORD et *WORD  @:[NA].*:f:s¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C") >>>
        <<- /gn/ morph(\2, ":A", ":A.*:[fe]:[si]") -2>> =suggFemSing(\2, True)                      && Cet adjectif n’est pas accordé avec le nom “\-1”.
        <<- /gn/ morph(\4, ":A", ":A.*:[fe]:[si]") -4>> =suggFemSing(\4, True)                      && Cet adjectif n’est pas accordé avec le nom “\-1”.
        <<- /gn/ morph(\2, ":A", ":A.*:[fe]:[si]") and morph(\4, ":A", ":A.*:[fe]:[si]")
        -5>> =suggMasSing(\5, True)                                                                 && Ce nom n’est pas accordé avec les adjectifs “\2” et “\4”.

    l’ *WORD et *WORD  @:[NA].*:e:s¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C") >>>
        <<- /gn/ morph(\4, ":A", ":A.*:[si]") -4>> =suggSing(\4)                                    && Cet adjectif n’est pas accordé avec le nom “\-1”.
        <<- /gn/ morph(\2, ":A.*:m:[si]", ":A.*:p") and morph(\4, ":A.*:f:[si]", ":A.*:p")
        -2>> =suggFemSing(\2, True)                                                                 && Cet adjectif n’est pas accordé en genre avec l’adjectif “\4”.
        <<- /gn/ __also__ -4>> =suggMasSing(\4, True)                                               && Cet adjectif n’est pas accordé en genre avec l’adjectif “\2”.
        <<- /gn/ morph(\2, ":A.*:f:[si]", ":A.*:p") and morph(\4, ":A.*:m:[si]", ":A.*:p")
        -2>> =suggMasSing(\2, True)                                                                 && Cet adjectif n’est pas accordé en genre avec l’adjectif “\4”.
        <<- /gn/ __also__ -4>> =suggFemSing(\4, True)                                               && Cet adjectif n’est pas accordé en genre avec l’adjectif “\2”.

    l’ *WORD et *WORD  @:[NA].*:p¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C")
        -5>> =suggSing(\5, True)                                                                    && Ce nom n’est pas accordé avec “l’\2 et \4” et devrait être singulier.

TEST: l’{{ignorante}} et {{grande}} {{crétin}} à qui j’avais affaire                ->> ignorant|||grand|||crétine
TEST: l’{{ordurier}} et {{sot}} {{abrutie}}                                         ->> ordurière|||sotte|||abruti
TEST: l’éblouissante et {{belles}} imbécile                                         ->> belle
TEST: l’{{amoureux}} et {{merveilleuse}} imbécile que nous avions là                ->> amoureuse|||merveilleux
TEST: l’{{amoureuse}} et {{merveilleux}} imbécile que nous avons là                 ->> amoureux|||merveilleuse
TEST: l’ignorant et sot {{hommes}} que voilà                                        ->> homme
TEST: j’aide l’homme et par amour pour lui le laisse libre.


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

TEST: le roi chrétien {{tyranniques}} tout pétri de son prétendu droit divin                    ->> tyrannique
TEST: le petit chien {{bruns}}                                                                  ->> brun
TEST: elles furent le jour venu prises par surprise, et elles durent s’enfuir.
TEST: qu’ils fassent tourner le système économique, assez concrètement, mais sans faire chier avec leurs petits problèmes de gens de rien.
TEST: avec le peuple, contre le capitalisme mortifère sous tous ses visages.


__gn_le_3m_et__
    le *WORD et *WORD  @:[NA].*:[me]:s¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[me]:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0|A.*:[me]:[si])|;C")
        -4>> =suggMasSing(\4)                                                                       && Cet adjectif n’est pas accordé avec le nom “\-1”.

    le *WORD et *WORD  @:[NA].*:f¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[me]:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C")
        -5>> =suggMasSing(\5, True)                                                                 && Ce nom n’est pas accordé avec “le \2 et \4” et devrait être au masculin singulier.

    le *WORD et *WORD  @:[NA].*:[me]:p¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[me]:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C")
        -5>> =suggSing(\5)                                                                          && Ce nom n’est pas accordé avec “le \2 et \4” et devrait être au singulier.

TEST: le petit et {{vulgaires}} individu que nous avons vu hier                         ->> vulgaire
TEST: le sot et ignorante {{abrutie}}                                                   ->> abruti
TEST: le prétentieux et sot {{hommes}} que voilà                                        ->> homme


__gn_la_1m__
    ,  la  *WORD
        <<- /gn/ morph(\3, ":[NA].*:m", ":(?:e|f|P|G|W|M|[1-3][sp]|Y)") -2>> le             && Accord de genre erroné : « \3 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\3) -3>> =suggFemSing(\3, True)                    && Accord de genre erroné : « \2 » est un déterminant féminin.
        <<- /gn/ __else__ and morph(\3, ":[NA].*:p") -3>> =suggFemSing(\3)                  && Accord de nombre erroné : « \3 » devrait être au singulier.

................................................................................
TEST: la {{vilénies}} des mensonges                             ->> vilénie
TEST: de {{la}} vin                                             ->> le
TEST: {{la}} {{véhicule}}                                       ->> le|||véhiculée
TEST: {{La}} {{pris}}                                           ->> Le|||prise
TEST: {{Le}} {{commandeuse}}                                    ->> La|||commandeur
TEST: {{Le}} {{commanderesse}}                                  ->> La|||commandeur
TEST: {{le}} {{doctoresse}} est là.                             ->> la|||docteur
TEST: la force de la {{formes}} parfaite                        ->> forme|formée
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
................................................................................
        -4>> =suggFemSing(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au féminin singulier.

TEST: la seule solution {{trouvé}} consistait à déléguer                                        ->> trouvée
TEST: La petite fille {{devenues}} infirmière.                                                  ->> devenue
TEST: sous la forme d’un baromètre comparant différents moyens pour alléger ses émissions
TEST: non seulement met en péril la logique industrielle mais contribue à détruire peu à peu le substrat sur lequel repose le marché lui-même, à savoir la société des hommes.


__gn_la_3m_et__
    la *WORD et *WORD  @:[NA].*:[fe]:s¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[fe]:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0|A.*:[fe]:[si])|;C")
        -4>> =suggFemSing(\4)                                                                       && Cet adjectif n’est pas accordé avec le nom “\-1”.

    la *WORD et *WORD  @:[NA].*:m¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[fe]:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C")
        -5>> =suggFemSing(\5, True)                                                                 && Ce nom n’est pas accordé avec “la \2 et \4” et devrait être au féminin singulier.

    la *WORD et *WORD  @:[NA].*:[fe]:p¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[fe]:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C")
        -5>> =suggSing(\5)                                                                          && Ce nom n’est pas accordé avec “la \2 et \4” et devrait être au singulier.

TEST: la petite et {{vulgaires}} femme que nous avons vu hier                           ->> vulgaire
TEST: la sotte et ignorante {{abruti}}                                                  ->> abrutie
TEST: la prétentieuse et sotte {{femmes}} que voilà                                     ->> femme


__gn_leur_1m__
    ,  leur  *WORD
        <<- /gn/ morph(\3, ":[NA].*:p", "*") -2>> leurs                                     && Accord de nombre erroné avec « \3 ».
        <<- /gn/ __also__ -3>> =suggSing(\3)                                                && Accord de nombre erroné : « \3 » devrait être au singulier.

    *WORD  leur  *WORD
................................................................................
        <<- /gn/ __else__ and morph(\2, ":[NA].*:[si]", "*") and morph(\3, ":[NA].*:[si]", ":(?:[123][sp]|G|P|B)|;C") and morph(\4, ":[NA].*:p", "*")
        -4>> =suggSing(\4)                                                                  && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au singulier.

TEST: leur grande passion {{délirants}} pour le cosplay.                            ->> délirante
TEST: leur noir projet {{ignorées}} du peuple                                       ->> ignoré
TEST: leur psychologue altruiste {{détestés}} par ses voisins                       ->> détesté


__gn_leur_3m_et__
    leur *WORD et *WORD  @:[NA].*:m:s¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C") >>>
        <<- /gn/ morph(\2, ":A", ":A.*:[me]:[si]") -2>> =suggMasSing(\2)                            && Cet adjectif n’est pas accordé avec le nom “\-1”.
        <<- /gn/ morph(\4, ":A", ":A.*:[me]:[si]") -4>> =suggMasSing(\4)                            && Cet adjectif n’est pas accordé avec le nom “\-1”.
        <<- /gn/ morph(\2, ":A", ":A.*:[me]:[si]") and morph(\4, ":A", ":A.*:[me]:[si]")
        -5>> =suggFemSing(\5, True)                                                                 && Ce nom n’est pas accordé avec les adjectifs “\2” et “\4”.

    leur *WORD et *WORD  @:[NA].*:f:s¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C") >>>
        <<- /gn/ morph(\2, ":A", ":A.*:[fe]:[si]") -2>> =suggFemSing(\2, True)                      && Cet adjectif n’est pas accordé avec le nom “\-1”.
        <<- /gn/ morph(\4, ":A", ":A.*:[fe]:[si]") -4>> =suggFemSing(\4, True)                      && Cet adjectif n’est pas accordé avec le nom “\-1”.
        <<- /gn/ morph(\2, ":A", ":A.*:[fe]:[si]") and morph(\4, ":A", ":A.*:[fe]:[si]")
        -5>> =suggMasSing(\5, True)                                                                 && Ce nom n’est pas accordé avec les adjectifs “\2” et “\4”.

    leur *WORD et *WORD  @:[NA].*:e:s¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C") >>>
        <<- /gn/ morph(\4, ":A", ":A.*:[si]") -4>> =suggSing(\4)                                    && Cet adjectif n’est pas accordé avec le nom “\-1”.
        <<- /gn/ morph(\2, ":A.*:m:[si]", ":A.*:p") and morph(\4, ":A.*:f:[si]", ":A.*:p")
        -2>> =suggFemSing(\2, True)                                                                 && Cet adjectif n’est pas accordé en genre avec l’adjectif “\4”.
        <<- /gn/ __also__ -4>> =suggMasSing(\4, True)                                               && Cet adjectif n’est pas accordé en genre avec l’adjectif “\2”.
        <<- /gn/ morph(\2, ":A.*:f:[si]", ":A.*:p") and morph(\4, ":A.*:m:[si]", ":A.*:p")
        -2>> =suggMasSing(\2, True)                                                                 && Cet adjectif n’est pas accordé en genre avec l’adjectif “\4”.
        <<- /gn/ __also__ -4>> =suggFemSing(\4, True)                                               && Cet adjectif n’est pas accordé en genre avec l’adjectif “\2”.

    leur *WORD et *WORD  @:[NA].*:p¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C")
        -5>> =suggSing(\5, True)                                                                    && Ce nom n’est pas accordé avec “leur \2 et \4” et devrait être singulier.

TEST: leur {{ignorante}} et {{grande}} {{crétin}} à qui j’avais affaire                ->> ignorant|||grand|||crétine
TEST: leur {{ordurier}} et {{sot}} {{abrutie}}                                         ->> ordurière|||sotte|||abruti
TEST: leur grande et {{belles}} imbécile                                               ->> belle
TEST: leur {{amoureux}} et {{merveilleuse}} imbécile                                   ->> amoureuse|||merveilleux
TEST: leur {{amoureuse}} et {{merveilleux}} imbécile                                   ->> amoureux|||merveilleuse
TEST: leur ignorant et sot {{hommes}} de main                                          ->> homme


__gn_ledit_1m__
    ledit  *WORD
        <<- /gn/ morph(\2, ":[NA].*:f", ":[GWme]") -1>> ladite                              && Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True)                    && Accord de genre erroné : « \1 » est un déterminant masculin.
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggMasSing(\2)                    && Accord de nombre erroné : « \2 » devrait être au singulier.

................................................................................
        -4>> =suggMasSing(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au masculin singulier.

TEST: ledit martyr oublié {{réhabilitée}}                                       ->> réhabilité
TEST: un gros connard {{pathétiques}}                                           ->> pathétique
TEST: servi pas un style et une exigence historique remarquables
TEST: ils eurent besoins d’au minimum cent ans pour s’en remettre


__gn_det_mas_sing_3m_et__
    [ledit|un|ce|cet|au|quel|audit|dudit|aucun|nul] *WORD et *WORD  @:[NA].*:[me]:s¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[me]:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0|A.*:[me]:[si])|;C")
        -4>> =suggMasSing(\4)                                                                       && Cet adjectif n’est pas accordé avec le nom “\-1”.

    [ledit|un|ce|cet|au|quel|audit|dudit|aucun|nul] *WORD et *WORD  @:[NA].*:f¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[me]:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C")
        -5>> =suggMasSing(\5, True)                                                                 && Ce nom n’est pas accordé avec “le \2 et \4” et devrait être au masculin singulier.

    [ledit|un|ce|cet|au|quel|audit|dudit|aucun|nul] *WORD et *WORD  @:[NA].*:[me]:p¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[me]:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C")
        -5>> =suggSing(\5)                                                                          && Ce nom n’est pas accordé avec “le \2 et \4” et devrait être au singulier.

TEST: un petit et {{vulgaires}} individu que nous avons vu hier                 ->> vulgaire
TEST: ce sot et ignorante {{abrutie}}                                           ->> abruti
TEST: nul prétentieux et sot {{hommes}} ne réussira                             ->> homme


__gn_mon_ton_son_1m__
    [mon|ton|son]  *WORD
        <<- /gn/ morph(\1, ":D") >>>
        <<- /gn/ morph(\2, ">[bcçdfgjklmnpqrstvwxz].*:[NA].*:f", ":[GWme]") -1>> =\1.replace("on", "a").replace("ON", "A")     && Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasSing(\2, True)                    && Accord de genre erroné : « \1 » est un déterminant masculin.
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggSing(\2)                       && Accord de nombre erroné : « \2 » devrait être au singulier.

TEST: mon {{excellentes}} mémoire                                               ->> excellente
TEST: {{ton}} {{belle}} mémoire                                                 ->> ta|||beau
TEST: {{mon}} {{chienne}}                                                       ->> ma|||chien


__gn_mon_ton_son_2m__
................................................................................
__gn_det_fem_sing_3m__
    [ladite|une|cette|ma|ta|sa|quelle|aucune|nulle]  *WORD  *WORD  *WORD
        <<- /gn/ morph(<1, "<start>|:V", "*") and morph(\2, ":[NA].*:[fe]:[si]") and morph(\3, ":[NA].*:[fe]:[si]", ":(?:[123][sp]|G|P|B)|;C") and morph(\4, ":[NA].*:[pm]", "*") and \4.islower()
        -4>> =suggFemSing(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au féminin singulier.

TEST: une amie prodigieuse {{récompensé}}                                       ->> récompensée


__gn_det_fem_sing_3m_et__
    [ladite|une|cette|ma|ta|sa|quelle|aucune|nulle] *WORD et *WORD  @:[NA].*:[fe]:s¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[fe]:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0|A.*:[fe]:[si])|;C")
        -4>> =suggFemSing(\4)                                                                       && Cet adjectif n’est pas accordé avec le nom “\-1”.

    [ladite|une|cette|ma|ta|sa|quelle|aucune|nulle] *WORD et *WORD  @:[NA].*:m¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[fe]:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C")
        -5>> =suggFemSing(\5, True)                                                                 && Ce nom n’est pas accordé avec “la \2 et \4” et devrait être au féminin singulier.

    [ladite|une|cette|ma|ta|sa|quelle|aucune|nulle] *WORD et *WORD  @:[NA].*:[fe]:p¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[fe]:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C")
        -5>> =suggSing(\5)                                                                          && Ce nom n’est pas accordé avec “\1 \2 et \4” et devrait être au singulier.

TEST: une petite et {{vulgaires}} femme que nous avons vu hier                  ->> vulgaire
TEST: quelle sotte et ignorante {{abruti}}                                      ->> abrutie
TEST: cette prétentieuse et sotte {{femmes}}                                    ->> femme


__gn_notre_votre_chaque_1m__
    [notre|votre|chaque]  *WORD
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggSing(\2)                       && Accord de nombre erroné : « \2 » devrait être au singulier.

TEST: Chaque {{chiens}}.                                                        ->> chien

................................................................................
TEST: ils viennent de chaque coin {{ignorée}} du pays.                          ->> ignoré
TEST: que faire de votre {{ennuyeuse}} {{avocat}}                               ->> ennuyeux|||avocate
TEST: de quelque cartable {{vides}}                                             ->> vide
TEST: de notre petit {{amis}}                                                   ->> ami
TEST: Quelque chose tombé dans le puits a souillé l’eau.


__gn_det_epi_sing_3m__
    [chaque|quelque|notre|votre]  *WORD  *WORD  *WORD
        <<- /gn/ morph(<1, "<start>|:V", "*") and \4.islower() >>>
        <<- /gn/ morph(\2, ":[NA].*:m:[si]", ":[fe]") and morph(\3, ":[NA].*:[me]:[si]", ":(?:[123][sp]|G|P|B)|;C") and morph(\4, ":[NA].*:f", "*")
        -4>> =suggMasSing(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au masculin singulier.
        <<- /gn/ __else__ and morph(\2, ":[NA].*:f:[si]", ":[me]") and morph(\3, ":[NA].*:[fe]:[si]", ":(?:[123][sp]|G|P|B)|;C") and morph(\4, ":[NA].*:m", "*")
        -4>> =suggFemSing(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au féminin singulier.
        <<- /gn/ __else__ and morph(\2, ":[NA].*:[si]", ":[fe]") and morph(\3, ":[NA].*:[me]:[si]", ":(?:[123][sp]|G|P|B)|;C") and morph(\4, ":[NA].*:p", "*")
        -4>> =suggSing(\4)                                                                  && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au singulier.

TEST: notre grande armée {{fabuleux}}                                           ->> fabuleuse
TEST: notre supérieur hiérarchique {{ignorante}} des pratiques                  ->> ignorant
TEST: votre petit test {{minables}}                                             ->> minable


__gn_det_epi_sing_3m_et__
    [chaque|quelque|notre|votre] *WORD et *WORD  @:[NA].*:m:s¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C") >>>
        <<- /gn/ morph(\2, ":A", ":A.*:[me]:[si]") -2>> =suggMasSing(\2)                            && Cet adjectif n’est pas accordé avec le nom “\-1”.
        <<- /gn/ morph(\4, ":A", ":A.*:[me]:[si]") -4>> =suggMasSing(\4)                            && Cet adjectif n’est pas accordé avec le nom “\-1”.
        <<- /gn/ morph(\2, ":A", ":A.*:[me]:[si]") and morph(\4, ":A", ":A.*:[me]:[si]")
        -5>> =suggFemSing(\5, True)                                                                 && Ce nom n’est pas accordé avec les adjectifs “\2” et “\4”.

    [chaque|quelque|notre|votre] *WORD et *WORD  @:[NA].*:f:s¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C") >>>
        <<- /gn/ morph(\2, ":A", ":A.*:[fe]:[si]") -2>> =suggFemSing(\2, True)                      && Cet adjectif n’est pas accordé avec le nom “\-1”.
        <<- /gn/ morph(\4, ":A", ":A.*:[fe]:[si]") -4>> =suggFemSing(\4, True)                      && Cet adjectif n’est pas accordé avec le nom “\-1”.
        <<- /gn/ morph(\2, ":A", ":A.*:[fe]:[si]") and morph(\4, ":A", ":A.*:[fe]:[si]")
        -5>> =suggMasSing(\5, True)                                                                 && Ce nom n’est pas accordé avec les adjectifs “\2” et “\4”.

    [chaque|quelque|notre|votre] *WORD et *WORD  @:[NA].*:e:s¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C") >>>
        <<- /gn/ morph(\4, ":A", ":A.*:[si]") -4>> =suggSing(\4)                                    && Cet adjectif n’est pas accordé avec le nom “\-1”.
        <<- /gn/ morph(\2, ":A.*:m:[si]", ":A.*:p") and morph(\4, ":A.*:f:[si]", ":A.*:p")
        -2>> =suggFemSing(\2, True)                                                                 && Cet adjectif n’est pas accordé en genre avec l’adjectif “\4”.
        <<- /gn/ __also__ -4>> =suggMasSing(\4, True)                                               && Cet adjectif n’est pas accordé en genre avec l’adjectif “\2”.
        <<- /gn/ morph(\2, ":A.*:f:[si]", ":A.*:p") and morph(\4, ":A.*:m:[si]", ":A.*:p")
        -2>> =suggMasSing(\2, True)                                                                 && Cet adjectif n’est pas accordé en genre avec l’adjectif “\4”.
        <<- /gn/ __also__ -4>> =suggFemSing(\4, True)                                               && Cet adjectif n’est pas accordé en genre avec l’adjectif “\2”.

    [chaque|quelque|notre|votre] *WORD et *WORD  @:[NA].*:p¬*
        <<- /gn/ morph(\1, ":D") and morph(\2, ":A.*:[si]", ":(?:G|W|V0)|;C") and morph(\4, ":A", ":(?:G|W|V0)|;C")
        -5>> =suggSing(\5, True)                                                                    && Ce nom n’est pas accordé avec “\1 \2 et \4” et devrait être singulier.

TEST: notre {{ignorante}} et {{grande}} {{crétin}} à qui j’avais affaire                ->> ignorant|||grand|||crétine
TEST: votre {{ordurier}} et {{sot}} {{abrutie}}                                         ->> ordurière|||sotte|||abruti
TEST: notre grande et {{belles}} imbécile                                               ->> belle
TEST: chaque {{amoureux}} et {{merveilleuse}} imbécile que nous avions là               ->> amoureuse|||merveilleux
TEST: quelque {{amoureuse}} et {{merveilleux}} imbécile que nous avons là               ->> amoureux|||merveilleuse
TEST: notre ignorant et sot {{hommes}} que voilà                                        ->> homme


## Pluriels

__gn_les_1m__
    ,  les  *WORD
        <<- /gn/ morph(\3, ":[NA].*:s", "*") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))
        -3>> =suggPlur(\3)                                                                  && Accord de nombre erroné : « \3 » devrait être au pluriel.