Grammalecte  Check-in [c79208cbc2]

Overview
Comment:[fr] options manquantes et nettoyage
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | fr | rg
Files: files | file ages | folders
SHA3-256: c79208cbc27c5e4ab8b0b88379c26563cce9b769ae3ae4fe06fc07b21b2d61db
User & Date: olr on 2018-07-28 09:08:39
Other Links: branch diff | manifest | tags
Context
2018-07-28
10:20
[fr] conversion: regex rules -> graph rules check-in: e8b896692d user: olr tags: fr, rg
09:08
[fr] options manquantes et nettoyage check-in: c79208cbc2 user: olr tags: fr, rg
00:14
[build] DARG: shorten building result display check-in: ffd3e274fa user: olr tags: build, rg
Changes

Modified gc_lang/fr/rules.grx from [049bff94f6] to [a28941d490].

8863
8864
8865
8866
8867
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
....
8895
8896
8897
8898
8899
8900
8901
8902
8903
8904
8905
8906
8907
8908
8909
8910
8911
8912
8913
8914
8915
8916
8917
8918
8919
8920
8921
8922
8923
8924
8925
8926
8927
8928
8929
8930
8931
8932
8933
8934
8935
8936
8937
8938
8939
8940
8941
8942
8943
8944
8945
8946
8947
8948
8949
8950
8951
8952
8953
8954
8955
8956
8957
8958
8959
8960
8961
8962
8963
8964
8965
8966
8967
8968
8969
8970
8971
8972
8973
8974
8975
8976
8977
8978
8979
8980
8981
8982
8983
8984
8985
8986
8987
....
8997
8998
8999
9000
9001
9002
9003
9004
9005
9006
9007
9008
9009
9010
9011
9012
9013
9014
9015
9016
9017
9018
9019
9020
9021
9022
9023
9024
9025
9026
9027
9028
....
9029
9030
9031
9032
9033
9034
9035
9036
9037
9038
9039
9040
9041
9042
9043
9044
9045
9046
9047
9048
9049
9050
9051
9052
9053
9054
9055
9056
9057
9058
9059
9060
9061
9062
9063
9064
9065
9066
9067
9068
9069
9070
9071
9072
9073
9074
9075
9076
9077
9078
9079
9080
9081
9082
9083
9084
9085
9086
9087
9088
9089
9090
9091
9092
9093
9094
9095
9096
9097
9098
9099
9100
9101
9102
9103
9104
9105
9106
9107
9108
9109
9110
9111
9112
9113
9114
9115
9116
9117
9118
9119
9120
9121
9122
9123
9124
9125
9126
9127
9128
9129
9130
9131
9132
9133
9134
9135
9136
9137
9138
9139
9140
9141
9142
9143
9144
9145
9146
9147
9148
9149
9150
9151
9152
9153
9154
9155
9156
9157
9158
9159
9160
9161
9162
9163
9164
9165
9166
9167
9168
9169
9170
9171
9172
9173
9174
9175
9176
9177
9178
9179
9180
9181
9182
9183
9184
9185
9186
9187
9188
9189
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
9203
9204
9205
9206
9207
9208
9209
9210
9211
9212
9213
9214
9215
9216
9217
9218
9219
9220
9221
9222
9223
9224
9225
9226
9227
9228
9229
9230
9231
9232
9233
9234
9235
9236
9237
9238
9239
9240
9241
9242
9243
9244
9245
9246
9247
9248
9249
9250
9251
9252
9253
9254
9255
9256
9257
9258
9259
9260
9261
9262
9263
9264
9265
9266
9267
9268
9269
9270
9271
9272
....
9281
9282
9283
9284
9285
9286
9287
9288
9289
9290
9291
9292
9293
9294
9295
9296
9297
9298
9299
9300
9301
9302
9303
9304
9305
9306
9307
9308
9309
9310
....
9364
9365
9366
9367
9368
9369
9370
9371
9372
9373
9374
9375
9376
9377
9378
9379
9380
9381
9382
9383
9384
9385
9386
9387
....
9399
9400
9401
9402
9403
9404
9405
9406
9407
9408
9409
9410
9411
9412
9413
9414
9415
9416
9417
9418
9419
9420
9421
9422
9423
....
9424
9425
9426
9427
9428
9429
9430
9431
9432
9433
9434
9435
9436
9437
9438
9439
9440
9441
9442
9443
9444
9445
9446
9447
9448
9449
9450
9451
....
9530
9531
9532
9533
9534
9535
9536
9537
9538
9539
9540
9541
9542
9543
9544
!!!! Groupe nominal (1)                                                                           !!
!!
!!

## l’

__gn_l_1m__
    l’  @:[NAQ].*:p¬:[123][sp]|:[si]
        <<- /gn/ -2>> =suggSing(\2)                                                                 # Accord de nombre erroné : “\2” devrait être au singulier.

TEST: toute l’importance de l’{{accords}} musical.


__gn_l_2m__
    l’  @:[NA]¬*  @:[NA]¬*
................................................................................
TEST: l’amour {{immortels}}
TEST: du chien et de l’{{excellente}} {{collier}} qu’il avait autour du cou.
TEST: du chien et de l’{{étonnante}} {{collier}} qu’il avait autour du cou.


__gn_le_1m__
    ,  le  *WORD
        <<- /gn/ morph(\3, "@:[NAQ].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)") -2>> =suggLesLa(\2)         # 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, ":[NAQ].*:p") -3>> =suggMasSing(\3)                         # Accord de nombre erroné : « \3 » devrait être au singulier.
        <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.

    *WORD  le  *WORD
        <<- /gn/ morph(\2, ":D") >>>
        <<- morph(\3, ":[NAQ].*:f", ":(?:e|m|P|G|W|[123][sp]|Y)")
            or ( morph(\3, ":[NAQ].*:f", ":[me]") and morph(\1, ":R", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
        -2>> =suggLesLa(\2)                                                                         # Accord de genre erroné : « \3 » est féminin.
        <<- __also__ and hasMasForm(\3) -3>> =suggMasSing(\3, True)                                 # Accord de genre erroné : « \2 » est un déterminant masculin.
        <<- __else__ and morph(\3, ":[NAQ].*:p", "*")
            or ( morph(\3, ":[NAQ].*:p", ":[si]") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
        -3>> =suggMasSing(\3)                                                                       # Accord de nombre erroné : « \3 » devrait être au singulier.
        <<- __also__ -2>> les                                                                       # Accord de nombre erroné : « \3 » est au pluriel.

    <start>  le  *WORD
        <<- /gn/ morph(\3, ":[NAQ].*:f", ":(?:e|m|P|G|W|Y)") -2>> =suggLesLa(\2)                    # 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, ":[NAQ].*: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: c’est une catastrophe, {{le}} {{profits}} a baissé ces deux derniers trimestres
TEST: {{Le}} démoralisation.                                  ->> La
TEST: {{Le}} Guyane française.                                ->> La
TEST: avec {{le}} {{pile}}
TEST: {{le}} {{publique}}
TEST: {{Le}} {{pendue}}


__gn_ledit_1m__
    ledit  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*: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, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(\2)                   # Accord de nombre erroné : « \2 » devrait être au singulier.

__gn_un_1m__
    un  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:f", ":(?:e|m|G|W|V0|3s|Y)") -1>> une                   # 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, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(\2)                   # Accord de nombre erroné : « \2 » devrait être au singulier.

__gn_un_des_1m__
    un  des  *WORD
        <<- /gn/ morph(\3, ":[NAQ].*:f", ":(?:e|m|G|W|V0|3s)") -1>> une                     # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasPlur(\3, True)                    # Accord de genre erroné : « \1 » est un déterminant masculin.

__gn_du_1m__
    du  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:f", ":[GWme]") -1>> de la                              # 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, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(\2)                   # Accord de nombre erroné : « \2 » devrait être au singulier.

__gn_cet_1m__
    cet  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:f", ":[GWme]") -1>> cette                              # 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, ">[bcçdfgjklmnpqrstvwxz].+:[NAQ].*:m", ":[efGW]") -1>> ce        # Accord de genre correct, mais euphonie non respectée.|http://fr.wikipedia.org/wiki/Euphonie
        <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(\2)                   # Accord de nombre erroné : « \2 » devrait être au singulier.

__gn_ce_1m__
    ce  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:f", ":(?:3s|[GWme])") -1>> cette                       # 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, ":[NAQ].*:f", ":[GWme]") and morph(\2, ":3s") -1>> cette|se      # Accord de genre erroné : « \2 » est féminin. Ou bien vous confondez le déterminant “ce” avec le pronom “se”.
        <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(\2)                   # Accord de nombre erroné : « \2 » devrait être au singulier.

__gn_mon_ton_son_1m__
    [mon|ton|son]  *WORD
        <<- /gn/ morph(\1, ":D") >>>
        <<- /gn/ morph(\2, ">[bcdfgjklmnpqrstvwxz].*:[NAQ].*:f", ":[GWme]") -1>> =\1.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, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(\2)                   # Accord de nombre erroné : « \2 » devrait être au singulier.

__gn_au_1m__
    au  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:f:s", ":[GWme]") -1>> à la                             # 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, ":[NAQ].*:p", ":[siGW]") -2>> =suggMasSing(\2)                   # Accord de nombre erroné : « \2 » devrait être au singulier.
        <<- /gn/ __also__ -1>> aux                                                          # Accord de nombre erroné : « \2 » est au pluriel.

TEST: ledit {{accords}} ne vaut rien.
TEST: {{au}} {{États-Unis}}
TEST: {{Un}} {{amie}}
TEST: {{Cet}} {{idiote}}.
TEST: {{cet}} ballon.                                         ->> ce
................................................................................
TEST: Trente et un hommes sur le pont.


## Singulier féminin

__gn_la_1m__
    ,  la  *WORD
        <<- /gn/ morph(\3, ":[NAQ].*:m", ":(?:e|f|P|G|W|[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, ":[NAQ].*:p") -3>> =suggFemSing(\3)                 # Accord de nombre erroné : « \3 » devrait être au singulier.

    *WORD  la  *WORD
        <<- /gn/ morph(\2, ":D") >>>
        <<- morph(\3, ":[NAQ].*:m", ":(?:e|f|P|G|W|[1-3][sp]|Y)")
            or ( morph(\3, ":[NAQ].*:m", ":[fe]") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":(?:Rv|C)") and morph(\3, ":Y")) )
        -2>> le                                                                             # Accord de genre erroné : « \3 » est masculin.
        <<- __also__ and hasFemForm(\3) -3>> =suggFemSing(\3, True)                         # Accord de genre erroné : « \2 » est un déterminant féminin.
        <<- __else__ and morph(\3, ":[NAQ].*:p")
            or ( morph(\3, ":[NAQ].*:p", ":[si]") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
        -3>> =suggFemSing(\3)                                                               # Accord de nombre erroné : « \3 » devrait être au singulier.

    <start>  la  *WORD
        <<- /gn/ morph(\3, ":[NAQ].*:m", ":[efPGWY]") -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, ":[NAQ].*:p", ":[siGW]") -3>> =suggFemSing(\3)      # Accord de nombre erroné : « \3 » devrait être au singulier.

TEST: c’est ennuyeux, la {{parties}} deux est ratée.
TEST: {{La}} Cameroun                                         ->> Le
TEST: {{La}} mustang est un cheval sauvage.                   ->> Le
TEST: {{La}} tableau.                                         ->> Le
TEST: dans la {{parties}}                                     ->> partie
TEST: de {{la}} vin                                           ->> le
................................................................................
TEST: {{la}} {{véhicule}}
TEST: {{La}} {{pris}}
TEST: la force de la {{formes}} parfaite


__gn_ladite_1m__
    ladite  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:m", ":[efGW]") -1>> ledit                              # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant féminin.
        <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggFemSing(\2)                   # Accord de nombre erroné : « \2 » devrait être au singulier.

TEST: ladite {{passions}} l’avait conduit à sa perte.


__gn_une_1m__
    une  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:m", ":(?:e|f|G|W|V0|3s|P)") and not ( \2 == "demi" and morph(>1, ":N.*:f", "*") )
        -1>> un                                                                             # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant féminin.
        <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggFemSing(\2)                   # Accord de nombre erroné : « \2 » devrait être au singulier.

__gn_une_des_1m__
    une  des  *WORD
        <<- /gn/ morph(\3, ":[NAQ].*:m", ":(?:e|f|G|W|V0|3s)") -1>> un                      # Accord de genre erroné : « \3 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\3) -3>> =suggFemPlur(\3, True)                    # Accord de genre erroné : « \1 » est un déterminant féminin.

TEST: un {{slashs}}                                           ->> slash
TEST: un {{fromages}}.                                        ->> fromage
TEST: Un {{ballons}}                                          ->> ballon
TEST: Une {{cinglées}}                                        ->> cinglée
TEST: {{une}} des {{joueurs}}
TEST: mille et une merveilles


__gn_cette_1m__
    cette  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:m", ":[efGW]") -1>> =suggCeOrCet(\2)                   # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant féminin.
        <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggFemSing(\2)                   # Accord de nombre erroné : « \2 » devrait être au singulier.

__gn_ma_ta_sa_1m__
    [ma|ta|sa]  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:m", ":[efGW]") -1>> =\1[:-1]+"on"                      # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and not re.search("(?i)^[aâeéèêiîoôuûyœæ]", \2) and hasFemForm(\2)
        -2>> =suggFemSing(\2, True)                                                         # Accord de genre erroné : « \1 » est un déterminant féminin.
        <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siGW]") -2>> =suggFemSing(\2)                   # Accord de nombre erroné : « \2 » devrait être au singulier.

TEST: {{une}} des {{chats}}
TEST: {{ma}} {{parti}}
TEST: {{ma}} amour                                            ->> mon
TEST: {{une}} kyste                                           ->> un
TEST: {{Cette}} {{animal}} mort.


## Singuliers épicènes

__gn_leur_1m__
    ,  leur  *WORD
        <<- /gn/ morph(\3, ":[NAQ].*: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/ morph(\3, ":[NAQ].*:p", "*")
            or ( morph(\3, ":[NAQ].*:p", ":[si]") and morph(\1, ":[RC]|>de/", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
        -2>> leurs                                                                          # Accord de nombre erroné avec « \3 ».
        <<- /gn/ __also__ -3>> =suggSing(\3)                                                # Accord de nombre erroné : « \3 » devrait être au singulier.

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

TEST: Tu sais, {{leur}} {{impatiences}} est notoire.
TEST: J’en ai assez de {{leur}} {{délires}}
TEST: {{Leur}} {{perceptions}} des choses m’exaspère.
TEST: dans {{leur}} {{usines}}


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

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


__gn_quelque_1m__
    quelque  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:p", ":[siG]") and not value(>1, "|que|qu’|qu|")
        -1>> quelques                                                                       # Il manque un “s” à « quelque » ou « \2 » doit être au singulier.

TEST: {{Quelque}} amis


## Pluriels épicènes

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

    *WORD  les  *WORD
        <<- /gn/ morph(\2, ":D")
            and ( morph(\3, ":[NAQ].*:s", "*") or (morph(\3, ":[NAQ].*:s", ":[pi]|>avoir") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y"))) )
            and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]"))
        -3>> =suggPlur(\3)                                                                  # Accord de nombre erroné : « \3 » devrait être au pluriel.

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

TEST: ils viennent, les {{petit}}
TEST: Les {{tiret}}                                           ->> tirets
TEST: Les plus {{grand}} hommes.                              ->> grands
TEST: les {{véhicule}}                                        ->> véhicules
TEST: Les {{démoralisation}}.                                 ->> démoralisations
TEST: dans les {{usine}}                                      ->> usines


__gn_leurs_1m__
    leurs  *WORD
        <<- /gn/ (morph(\2, ":[NAQ].*:s", ":(?:[ipGW]|[123][sp])") and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]")))
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.
        <<- /gn/ __also__ -1>> leur                                                         # Accord de nombre erroné avec « \2 ».

TEST: {{leurs}} {{action}}
TEST: {{leur}} {{données}}


__gn_det_pluriel_1m__
    [des|mes|tes|ses|nos|vos|quelques|lesdits|moult]  *WORD
        <<- (morph(\2, ":[NAQ].*:s", ":[ipGW]") and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]")))
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.

TEST: des {{pain}}                                            ->> pains
TEST: Quelques {{homme}}.                                     ->> hommes
TEST: plusieurs {{femme}} sont venues.
TEST: une personne ou plusieurs ayant décidé de façon déterminée et coordonnée de faire cuire la grenouille


__gn_ces_aux_pluriel_1m__
    [ces|aux]  *WORD
        <<- (morph(\2, ":[NAQ].*:s", ":[ipGW]") and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]")))
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.
        <<- __also__ and morph(\2, ">[bcdfglklmnpqrstvwxz].*:m", ":f") >>>
        <<- \1.endswith("x") or \1.endswith("X") -1>> au                                    # Accord de nombre erroné : « \2 » est au pluriel.
        <<- __else__ -1>> ce                                                                # Accord de nombre erroné : « \2 » est au pluriel.

TEST: {{ces}} {{détournement}} de fonds et ces vols
TEST: ces {{étudiant}} sont légion.
TEST: je vais {{aux}} {{cinéma}}
TEST: il l’a donné aux {{étudiant}}


__gn_plusieurs_1m__
    plusieurs  *WORD
        <<- (morph(\2, ":[NAQ].*:s", ":[ipGWP]") and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]")))
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.

TEST: plusieurs {{foi}} par jour.


## Autres pluriels

## certains / certaines
__gn_certains_1m__
    certains  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:f", ":[emGWP]") -1>> certaines                         # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasPlur(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant masculin.
        <<- /gn/ ( morph(\2, ":[NAQ].*:s", ":(?:[ipGWP]|V0)") and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]")) )
            or \1 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.

__gn_certains_des_1m__
    certains  des  *WORD
        <<- /gn/ morph(\3, ":[NAQ].*:f", ":[emGW]") -1>> certaines                          # Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasPlur(\3, True)                    # Accord de genre erroné : « \1 » est un déterminant masculin.

__gn_certaines_1m__
    certaines  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:m", ":[efGWP]") -1>> certains                          # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemPlur(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant féminin.
        <<- /gn/ ( morph(\2, ":[NAQ].*:s", ":[ipGWP]") and not (value(>1, "|et|ou|") and morph(>2, ":[NAQ]")) )
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.

__gn_certaines_des_1m__
    certaines  des  *WORD
        <<- /gn/ morph(\3, ":[NAQ].*:m", ":[efGW]") -1>> certains                           # Accord de genre erroné : « \3 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\3) -3>> =suggFemPlur(\3, True)                    # Accord de genre erroné : « \1 » est un déterminant féminin.

TEST: Certaines {{danse}}
TEST: Certains {{chien}}
TEST: {{certains}} des {{nouvelles}} sont à côté de la plaque.
TEST: {{certaines}} des hommes
TEST: Un problème rapporté par certains est l’incapacité à trouver un partenaire


## quel / quels / quelle / quelles
__gn_quel_1m__
    quel  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:f:p", ":(?:V0|Oo|[NAQ].*:[me]:[si])")      -1>> quelles                    # Accord de genre et de nombre erroné : « \2 » est féminin et au pluriel.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggMasSing(\2, True)     # Accord de genre et de nombre erroné : « \1 » est masculin et au singulier.
        <<- /gn/ morph(\2, ":[NAQ].*:m:p", ":(?:V0|Oo|[NAQ].*:[me]:[si])")      -1>> quels                      # Accord de nombre erroné : « \2 » est au pluriel.
        <<- /gn/ __also__                                                       -2>> =suggSing(\2)              # Accord de nombre erroné : « \1 » est au singulier.
        <<- /gn/ morph(\2, ":[NAQ].*:f:[si]", ":(?:V0|Oo|[NAQ].*:[me]:[si])")   -1>> quelle                     # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggMasSing(\2, True)     # Accord de genre erroné : « \1 » est masculin.

__gn_quels_1m__
    quels  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:f:s", ":(?:V0|Oo|[NAQ].*:[me]:[pi])")      -1>> quelle                     # Accord de genre et de nombre erroné : « \2 » est féminin et au singulier.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggMasPlur(\2, True)     # Accord de genre et de nombre erroné : « \1 » est masculin et au pluriel.
        <<- /gn/ morph(\2, ":[NAQ].*:m:s", ":(?:V0|Oo|[NAQ].*:[me]:[pi])")      -1>> quel                       # Accord de nombre erroné : « \2 » est au singulier.
        <<- /gn/ __also__                                                       -2>> =suggPlur(\2)              # Accord de nombre erroné : « \1 » est au pluriel.
        <<- /gn/ morph(\2, ":[NAQ].*:f:[pi]", ":(?:V0|Oo|[NAQ].*:[me]:[pi])")   -1>> quelles                    # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggMasPlur(\2, True)     # Accord de genre erroné : « \1 » est masculin.

__gn_quelle_1m__
    quelle  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:m:p", ":(?:V0|Oo|[NAQ].*:[fe]:[si])")      -1>> quels                      # Accord de genre et de nombre erroné : « \2 » est masculin et au pluriel.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemSing(\2, True)     # Accord de genre et de nombre erroné : « \1 » est féminin et au singulier.
        <<- /gn/ morph(\2, ":[NAQ].*:f:p", ":(?:V0|Oo|[NAQ].*:[fe]:[si])")      -1>> quelles                    # Accord de nombre erroné : « \2 » est au pluriel.
        <<- /gn/ __also__                                                       -2>> =suggSing(\2)              # Accord de nombre erroné : « \1 » est au singulier.
        <<- /gn/ morph(\2, ":[NAQ].*:m:[si]", ":(?:V0|Oo|[NAQ].*:[fe]:[si])")   -1>> quel                       # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemSing(\2, True)     # Accord de genre erroné : « \1 » est féminin.

__gn_quelles_1m__
    quelles  *WORD
        <<- /gn/ morph(\2, ":[NAQ].*:m:s", ":(?:V0|Oo|[NAQ].*:[fe]:[pi])")      -1>> quel                       # Accord de genre et de nombre erroné. « \2 » est masculin et au singulier.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemPlur(\2, True)     # Accord de genre et de nombre erroné : « \1 » est féminin et au pluriel.
        <<- /gn/ morph(\2, ":[NAQ].*:f:s", ":(?:V0|Oo|[NAQ].*:[fe]:[pi])")      -1>> quelle                     # Accord de nombre erroné : « \2 » est au singulier.
        <<- /gn/ __also__                                                       -2>> =suggPlur(\2)              # Accord de nombre erroné : « \1 » est au pluriel.
        <<- /gn/ morph(\2, ":[NAQ].*:m:[pi]", ":(?:V0|Oo|[NAQ].*:[fe]:[pi])")   -1>> quels                      # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemPlur(\2, True)     # Accord de genre erroné : « \1 » est féminin.

TEST: {{Quelle}} homme.                                       ->> Quel
TEST: {{Quel}} femme.                                         ->> Quelle
TEST: {{Quels}} chanson.                                      ->> Quelle
TEST: {{Quelles}} {{tarés}}.
TEST: Quelle sale journée…
................................................................................
__gn_quels_quelles_accord_être__
    [quels|quelles]  [est|étais|était|sera|serais|serait|fut|fût|fus]
        <<- /gn/ not value(<1, "|tels|telles|")
        -1>> =\1[:-1]                                                                       # Accord de nombre erroné avec “\2”.

__gn_quel_accord_être_sujet__
    quel  [est|était|seras|sera|serais|serait|fut|fût|fus]  [la|cette|mon|ton|son|ma|ta|sa|notre|votre|leur]  *WORD
        <<- /gn/ not value(<1, "|tel|telle|") and morph(\4, ":[NAQ].*:f", ":[me]")
        -1>> quelle                                                                         # Accord de genre erroné avec « \3 \4 ».

__gn_quelle_accord_être_sujet__
    quelle  [est|était|seras|sera|serais|serait|fut|fût|fus]  [le|ce|cet|mon|ton|son|notre|votre|leur]  *WORD
        <<- /gn/ not value(<1, "|tel|telle|") and morph(\4, ":[NAQ].*:m", ":[fe]")
        -1>> quel                                                                           # Accord de genre erroné avec « \3 \4 ».

__gn_quels_accord_être_sujet__
    quels  [sont|étaient|seront|serons|seraient|furent|fussent]  [les|ces|mes|tes|ses|nos|vos|leurs]  *WORD
        <<- /gn/ not value(<1, "|tels|telles|") and morph(\4, ":[NAQ].*:f", ":[me]")
        -1>> quelles                                                                        # Accord de genre erroné avec « \3 \4 ».

__gn_quelles_accord_être_sujet__
    quelles  [sont|étaient|seront|serons|seraient|furent|fussent]  [les|ces|mes|tes|ses|nos|vos|leurs]  *WORD
        <<- /gn/ not value(<1, "|tels|telles|") and morph(\4, ":[NAQ].*:m", ":[fe]")
        -1>> quels                                                                          # Accord de genre erroné avec « \3 \4 ».

TEST: {{Quel}} sont ces hommes.                               ->> Quels
TEST: {{Quel}} est cette force ?                              ->> Quelle
TEST: {{Quelle}} est mon animal favori ?                      ->> Quel
TEST: {{Quels}} sont ces femmes ?                             ->> Quelles
TEST: {{Quelles}} est cette imbécillité ?                     ->> Quelle
................................................................................
TEST: des {{son}} que nous entendons jour et nuit.
TEST: j’entends ces {{même}} âneries tous les jours


## Pluriel des groupes
__gn_nombre_de_1m__
    nombre  [de|d’]  *WORD
        <<- /gn/ (morph(\3, ":[NAQ].*:s", ":[ip]|>o(?:nde|xydation|r)/") and morph(<1, ":(?:G|[123][sp])|<start>", ":[AD]"))
            or \3 in aREGULARPLURAL
        -3>> =suggPlur(\3)                                                                  # Ici, « nombre de » devrait probablement être suivi d’un pluriel.

TEST: Je connais nombre d’{{emmerdeur}} et aucun n’est pire que lui.


__gn_det_groupe_de_1m__
    [un|une|le|la|ce|cette|mon|ton|son|ma|ta|sa|les|ces|des|mes|tes|ses|nos|vos|leurs|quelques]  [>centaine|>millier|>million|>milliard|>dixaine|>douzaine|>multitude|>horde]  [de|d’]  *WORD
        <<- /gn/ morph(\4, ":[NAQ].*:s", ":[ip]") or \4 in aREGULARPLURAL
        -4>> =suggPlur(\4)                                                                  # Avec des « \2 \3 \4 », mettre au pluriel.

TEST: des centaines de {{bête}} à cornes passèrent devant nous.     ->> bêtes
TEST: une multitude d’{{homme}}                                     ->> hommes


## quelque adverbe
................................................................................
TEST: les quelque 2,5 millions d’habitants
TEST: les quelque 12 000 stations-service


## Nombres
__gn_nombre_lettres_1m__
    @:B:e:p  *WORD
        <<- /gn/ not value(\1, "|neuf|mille|") and ( (morph(\2, ":[NAQ].*:s", "*") and not value(\2, "|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|") )
            or \2 in aREGULARPLURAL)
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

    neuf  *WORD
        <<- /gn/ ( morph(\2, ":[NAQ].*:s", "*") and not morph(<1, ":N.*:m:[is]") and not value(\2, "|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|") )
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

    mille  *WORD
        <<- /gn/ (morph(\2, ":[NAQ].*:s", "*") or \1 in aREGULARPLURAL) and not value(<1, "|le|un|ce|du|")
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

TEST: ce sont trois {{idiot}} pas foutus de trouver leur chemin avec un GPS.
TEST: Il a abandonné neuf {{enfant}}.
TEST: On peut trouver mille {{travailleur}} d’un claquement de doigts.
TEST: un logement neuf bâti par des professionnels.
TEST: un mille marin.
................................................................................


__gn_nombre_chiffres_1m__
    [0|1|01]  @:[NAQ].*:p¬*
        <<- /gn/ not value(\2, "|Rois|Corinthiens|Thessaloniciens|") -2>> =suggSing(\2)     # Accord de nombre erroné : « \1 » devrait être au singulier.

    ~^\d+$  *WORD
        <<- not value(<1, "|/|") and not re.search("^0*[01]$", \1)
            and ( (morph(\2, ":[NAQ].*:s", "*") and not value(\2, "|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|"))
            or \1 in aREGULARPLURAL )
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.

TEST: 00 heure, 01 heure
TEST: il a adopté 1 {{chiens}}.
TEST: 22 {{heure}}
TEST: 3 {{heure}}


##  trouver ça/ceci/cela + adj
__gn_trouver_ça_adj__
    >trouver  [ça|cela|ceci]  @:A.*:(?:f|m:p)¬:(?:G|3[sp]|M[12P])
        <<- /gn/ -3>> =suggMasSing(\3)                                              # Trouver \2 + [adjectif] : l’adjectif s’accorde avec “\2” (au masculin singulier).

TEST: ils trouvent ça de plus en plus {{idiots}}              ->> idiot


!!
!!
................................................................................
TEST: avec {{grand}} {{industrie}}
TEST: sur {{petite}} {{pied}}
TEST: Après être demeurée assise pendant quelque temps, elle se leva
TEST: ils choisissent de devenir indépendants


__gn_de_manière_façon_1m__
    de  [manière|façon]  @:A.*:(m|f:p)¬:[GM]
        <<- /gn/ -3>> =suggFemSing(\3)                                                              # Accord erroné avec “\2” : l’adjectif devrait être au féminin singulier.

TEST: il fit cela tans de fois et avec brio de manière {{élégant}}.
TEST: elle s’y prit avec cet individu de façon {{charmant}}.


@@@@







|







 







|

|




|
|


|
|




|

|












|

|



|

|



|




|

|



|

|
|



|

|
|




|

|



|

|







 







|

|



|
|

|
|
|



|

|







 







|

|






|


|



|












|

|



|


|












|



|
|




|










|






|









|





|
|



|













|










|











|


|
|
|









|











|

|





|




|

|





|












|

|

|




|

|

|




|

|

|




|

|

|







 







|




|




|




|







 







|








|







 







|




|




|







 







|
|











|







 







|







8863
8864
8865
8866
8867
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
....
8895
8896
8897
8898
8899
8900
8901
8902
8903
8904
8905
8906
8907
8908
8909
8910
8911
8912
8913
8914
8915
8916
8917
8918
8919
8920
8921
8922
8923
8924
8925
8926
8927
8928
8929
8930
8931
8932
8933
8934
8935
8936
8937
8938
8939
8940
8941
8942
8943
8944
8945
8946
8947
8948
8949
8950
8951
8952
8953
8954
8955
8956
8957
8958
8959
8960
8961
8962
8963
8964
8965
8966
8967
8968
8969
8970
8971
8972
8973
8974
8975
8976
8977
8978
8979
8980
8981
8982
8983
8984
8985
8986
8987
....
8997
8998
8999
9000
9001
9002
9003
9004
9005
9006
9007
9008
9009
9010
9011
9012
9013
9014
9015
9016
9017
9018
9019
9020
9021
9022
9023
9024
9025
9026
9027
9028
....
9029
9030
9031
9032
9033
9034
9035
9036
9037
9038
9039
9040
9041
9042
9043
9044
9045
9046
9047
9048
9049
9050
9051
9052
9053
9054
9055
9056
9057
9058
9059
9060
9061
9062
9063
9064
9065
9066
9067
9068
9069
9070
9071
9072
9073
9074
9075
9076
9077
9078
9079
9080
9081
9082
9083
9084
9085
9086
9087
9088
9089
9090
9091
9092
9093
9094
9095
9096
9097
9098
9099
9100
9101
9102
9103
9104
9105
9106
9107
9108
9109
9110
9111
9112
9113
9114
9115
9116
9117
9118
9119
9120
9121
9122
9123
9124
9125
9126
9127
9128
9129
9130
9131
9132
9133
9134
9135
9136
9137
9138
9139
9140
9141
9142
9143
9144
9145
9146
9147
9148
9149
9150
9151
9152
9153
9154
9155
9156
9157
9158
9159
9160
9161
9162
9163
9164
9165
9166
9167
9168
9169
9170
9171
9172
9173
9174
9175
9176
9177
9178
9179
9180
9181
9182
9183
9184
9185
9186
9187
9188
9189
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
9203
9204
9205
9206
9207
9208
9209
9210
9211
9212
9213
9214
9215
9216
9217
9218
9219
9220
9221
9222
9223
9224
9225
9226
9227
9228
9229
9230
9231
9232
9233
9234
9235
9236
9237
9238
9239
9240
9241
9242
9243
9244
9245
9246
9247
9248
9249
9250
9251
9252
9253
9254
9255
9256
9257
9258
9259
9260
9261
9262
9263
9264
9265
9266
9267
9268
9269
9270
9271
9272
....
9281
9282
9283
9284
9285
9286
9287
9288
9289
9290
9291
9292
9293
9294
9295
9296
9297
9298
9299
9300
9301
9302
9303
9304
9305
9306
9307
9308
9309
9310
....
9364
9365
9366
9367
9368
9369
9370
9371
9372
9373
9374
9375
9376
9377
9378
9379
9380
9381
9382
9383
9384
9385
9386
9387
....
9399
9400
9401
9402
9403
9404
9405
9406
9407
9408
9409
9410
9411
9412
9413
9414
9415
9416
9417
9418
9419
9420
9421
9422
9423
....
9424
9425
9426
9427
9428
9429
9430
9431
9432
9433
9434
9435
9436
9437
9438
9439
9440
9441
9442
9443
9444
9445
9446
9447
9448
9449
9450
9451
....
9530
9531
9532
9533
9534
9535
9536
9537
9538
9539
9540
9541
9542
9543
9544
!!!! Groupe nominal (1)                                                                           !!
!!
!!

## l’

__gn_l_1m__
    l’  @:[NA].*:p¬:[123][sp]|:[si]
        <<- /gn/ -2>> =suggSing(\2)                                                                 # Accord de nombre erroné : “\2” devrait être au singulier.

TEST: toute l’importance de l’{{accords}} musical.


__gn_l_2m__
    l’  @:[NA]¬*  @:[NA]¬*
................................................................................
TEST: l’amour {{immortels}}
TEST: du chien et de l’{{excellente}} {{collier}} qu’il avait autour du cou.
TEST: du chien et de l’{{étonnante}} {{collier}} 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(\2)          # 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") -3>> =suggMasSing(\3)                          # Accord de nombre erroné : « \3 » devrait être au singulier.
        <<- /gn/ __also__ -2>> les                                                                  # Accord de nombre erroné : « \3 » est au pluriel.

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

    <start>  le  *WORD
        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|P|G|W|Y)") -2>> =suggLesLa(\2)                     # 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: c’est une catastrophe, {{le}} {{profits}} a baissé ces deux derniers trimestres
TEST: {{Le}} démoralisation.                                  ->> La
TEST: {{Le}} Guyane française.                                ->> La
TEST: avec {{le}} {{pile}}
TEST: {{le}} {{publique}}
TEST: {{Le}} {{pendue}}


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

__gn_un_1m__
    un  *WORD
        <<- /gn/ morph(\2, ":[NA].*:f", ":(?:e|m|G|W|V0|3s|Y)") -1>> une                    # 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.

__gn_un_des_1m__
    un  des  *WORD
        <<- /gn/ morph(\3, ":[NA].*:f", ":(?:e|m|G|W|V0|3s)") -1>> une                      # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasPlur(\3, True)                    # Accord de genre erroné : « \1 » est un déterminant masculin.

__gn_du_1m__
    du  *WORD
        <<- /gn/ morph(\2, ":[NA].*:f", ":[GWme]") -1>> de la                               # 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.

__gn_cet_1m__
    cet  *WORD
        <<- /gn/ morph(\2, ":[NA].*:f", ":[GWme]") -1>> cette                               # 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, ">[bcçdfgjklmnpqrstvwxz].+:[NA].*:m", ":[efGW]") -1>> ce         # Accord de genre correct, mais euphonie non respectée.|http://fr.wikipedia.org/wiki/Euphonie
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggMasSing(\2)                    # Accord de nombre erroné : « \2 » devrait être au singulier.

__gn_ce_1m__
    ce  *WORD
        <<- /gn/ morph(\2, ":[NA].*:f", ":(?:3s|[GWme])") -1>> cette                        # 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].*:f", ":[GWme]") and morph(\2, ":3s") -1>> cette|se       # Accord de genre erroné : « \2 » est féminin. Ou bien vous confondez le déterminant “ce” avec le pronom “se”.
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggMasSing(\2)                    # Accord de nombre erroné : « \2 » devrait être au singulier.

__gn_mon_ton_son_1m__
    [mon|ton|son]  *WORD
        <<- /gn/ morph(\1, ":D") >>>
        <<- /gn/ morph(\2, ">[bcdfgjklmnpqrstvwxz].*:[NA].*:f", ":[GWme]") -1>> =\1.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.

__gn_au_1m__
    au  *WORD
        <<- /gn/ morph(\2, ":[NA].*:f:s", ":[GWme]") -1>> à la                              # 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.
        <<- /gn/ __also__ -1>> aux                                                          # Accord de nombre erroné : « \2 » est au pluriel.

TEST: ledit {{accords}} ne vaut rien.
TEST: {{au}} {{États-Unis}}
TEST: {{Un}} {{amie}}
TEST: {{Cet}} {{idiote}}.
TEST: {{cet}} ballon.                                         ->> ce
................................................................................
TEST: Trente et un hommes sur le pont.


## Singulier féminin

__gn_la_1m__
    ,  la  *WORD
        <<- /gn/ morph(\3, ":[NA].*:m", ":(?:e|f|P|G|W|[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.

    *WORD  la  *WORD
        <<- /gn/ morph(\2, ":D") >>>
        <<- /gn/ morph(\3, ":[NA].*:m", ":(?:e|f|P|G|W|[1-3][sp]|Y)")
            or ( morph(\3, ":[NA].*:m", ":[fe]") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":(?:Rv|C)") and morph(\3, ":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")
            or ( morph(\3, ":[NA].*:p", ":[si]") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
        -3>> =suggFemSing(\3)                                                               # Accord de nombre erroné : « \3 » devrait être au singulier.

    <start>  la  *WORD
        <<- /gn/ morph(\3, ":[NA].*:m", ":[efPGWY]") -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", ":[siGW]") -3>> =suggFemSing(\3)       # Accord de nombre erroné : « \3 » devrait être au singulier.

TEST: c’est ennuyeux, la {{parties}} deux est ratée.
TEST: {{La}} Cameroun                                         ->> Le
TEST: {{La}} mustang est un cheval sauvage.                   ->> Le
TEST: {{La}} tableau.                                         ->> Le
TEST: dans la {{parties}}                                     ->> partie
TEST: de {{la}} vin                                           ->> le
................................................................................
TEST: {{la}} {{véhicule}}
TEST: {{La}} {{pris}}
TEST: la force de la {{formes}} parfaite


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

TEST: ladite {{passions}} l’avait conduit à sa perte.


__gn_une_1m__
    une  *WORD
        <<- /gn/ morph(\2, ":[NA].*:m", ":(?:e|f|G|W|V0|3s|P)") and not ( \2 == "demi" and morph(>1, ":N.*:f", "*") )
        -1>> un                                                                             # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant féminin.
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggFemSing(\2)                    # Accord de nombre erroné : « \2 » devrait être au singulier.

__gn_une_des_1m__
    une  des  *WORD
        <<- /gn/ morph(\3, ":[NA].*:m", ":(?:e|f|G|W|V0|3s)") -1>> un                       # Accord de genre erroné : « \3 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\3) -3>> =suggFemPlur(\3, True)                    # Accord de genre erroné : « \1 » est un déterminant féminin.

TEST: un {{slashs}}                                           ->> slash
TEST: un {{fromages}}.                                        ->> fromage
TEST: Un {{ballons}}                                          ->> ballon
TEST: Une {{cinglées}}                                        ->> cinglée
TEST: {{une}} des {{joueurs}}
TEST: mille et une merveilles


__gn_cette_1m__
    cette  *WORD
        <<- /gn/ morph(\2, ":[NA].*:m", ":[efGW]") -1>> =suggCeOrCet(\2)                    # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemSing(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant féminin.
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggFemSing(\2)                    # Accord de nombre erroné : « \2 » devrait être au singulier.

__gn_ma_ta_sa_1m__
    [ma|ta|sa]  *WORD
        <<- /gn/ morph(\2, ":[NA].*:m", ":[efGW]") -1>> =\1[:-1]+"on"                       # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and not re.search("(?i)^[aâeéèêiîoôuûyœæ]", \2) and hasFemForm(\2)
        -2>> =suggFemSing(\2, True)                                                         # Accord de genre erroné : « \1 » est un déterminant féminin.
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siGW]") -2>> =suggFemSing(\2)                    # Accord de nombre erroné : « \2 » devrait être au singulier.

TEST: {{une}} des {{chats}}
TEST: {{ma}} {{parti}}
TEST: {{ma}} amour                                            ->> mon
TEST: {{une}} kyste                                           ->> un
TEST: {{Cette}} {{animal}} mort.


## Singuliers épicènes

__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/ morph(\3, ":[NA].*:p", "*")
            or ( morph(\3, ":[NA].*:p", ":[si]") and morph(\1, ":[RC]|>de/", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y")) )
        -2>> leurs                                                                          # Accord de nombre erroné avec « \3 ».
        <<- /gn/ __also__ -3>> =suggSing(\3)                                                # Accord de nombre erroné : « \3 » devrait être au singulier.

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

TEST: Tu sais, {{leur}} {{impatiences}} est notoire.
TEST: J’en ai assez de {{leur}} {{délires}}
TEST: {{Leur}} {{perceptions}} des choses m’exaspère.
TEST: dans {{leur}} {{usines}}


__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


__gn_quelque_1m__
    quelque  *WORD
        <<- /gn/ morph(\2, ":[NA].*:p", ":[siG]") and not value(>1, "|que|qu’|qu|")
        -1>> quelques                                                                       # Il manque un “s” à « quelque » ou « \2 » doit être au singulier.

TEST: {{Quelque}} amis


## Pluriels épicènes

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

    *WORD  les  *WORD
        <<- /gn/ morph(\2, ":D")
            and ( morph(\3, ":[NA].*:s", "*") or (morph(\3, ":[NA].*:s", ":[pi]|>avoir") and morph(\1, ":[RC]", ">(?:e[tn]|ou)/") and not (morph(\1, ":Rv") and morph(\3, ":Y"))) )
            and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))
        -3>> =suggPlur(\3)                                                                  # Accord de nombre erroné : « \3 » devrait être au pluriel.

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

TEST: ils viennent, les {{petit}}
TEST: Les {{tiret}}                                           ->> tirets
TEST: Les plus {{grand}} hommes.                              ->> grands
TEST: les {{véhicule}}                                        ->> véhicules
TEST: Les {{démoralisation}}.                                 ->> démoralisations
TEST: dans les {{usine}}                                      ->> usines


__gn_leurs_1m__
    leurs  *WORD
        <<- /gn/ (morph(\2, ":[NA].*:s", ":(?:[ipGW]|[123][sp])") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]")))
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.
        <<- /gn/ __also__ -1>> leur                                                         # Accord de nombre erroné avec « \2 ».

TEST: {{leurs}} {{action}}
TEST: {{leur}} {{données}}


__gn_det_pluriel_1m__
    [des|mes|tes|ses|nos|vos|quelques|lesdits|moult]  *WORD
        <<- /gn/ (morph(\2, ":[NA].*:s", ":[ipGW]") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]")))
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.

TEST: des {{pain}}                                            ->> pains
TEST: Quelques {{homme}}.                                     ->> hommes
TEST: plusieurs {{femme}} sont venues.
TEST: une personne ou plusieurs ayant décidé de façon déterminée et coordonnée de faire cuire la grenouille


__gn_ces_aux_pluriel_1m__
    [ces|aux]  *WORD
        <<- /gn/ (morph(\2, ":[NA].*:s", ":[ipGW]") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]")))
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.
        <<- /gn/ __also__ and morph(\2, ">[bcdfglklmnpqrstvwxz].*:m", ":f") >>>
        <<- /gn/ \1.endswith("x") or \1.endswith("X") -1>> au                               # Accord de nombre erroné : « \2 » est au pluriel.
        <<- /gn/ __else__ -1>> ce                                                           # Accord de nombre erroné : « \2 » est au pluriel.

TEST: {{ces}} {{détournement}} de fonds et ces vols
TEST: ces {{étudiant}} sont légion.
TEST: je vais {{aux}} {{cinéma}}
TEST: il l’a donné aux {{étudiant}}


__gn_plusieurs_1m__
    plusieurs  *WORD
        <<- /gn/ (morph(\2, ":[NA].*:s", ":[ipGWP]") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]")))
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.

TEST: plusieurs {{foi}} par jour.


## Autres pluriels

## certains / certaines
__gn_certains_1m__
    certains  *WORD
        <<- /gn/ morph(\2, ":[NA].*:f", ":[emGWP]") -1>> certaines                          # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\2) -2>> =suggMasPlur(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant masculin.
        <<- /gn/ ( morph(\2, ":[NA].*:s", ":(?:[ipGWP]|V0)") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]")) )
            or \1 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.

__gn_certains_des_1m__
    certains  des  *WORD
        <<- /gn/ morph(\3, ":[NA].*:f", ":[emGW]") -1>> certaines                           # Accord de genre erroné : « \3 » est féminin.
        <<- /gn/ __also__ and hasMasForm(\3) -3>> =suggMasPlur(\3, True)                    # Accord de genre erroné : « \1 » est un déterminant masculin.

__gn_certaines_1m__
    certaines  *WORD
        <<- /gn/ morph(\2, ":[NA].*:m", ":[efGWP]") -1>> certains                           # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2) -2>> =suggFemPlur(\2, True)                    # Accord de genre erroné : « \1 » est un déterminant féminin.
        <<- /gn/ ( morph(\2, ":[NA].*:s", ":[ipGWP]") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]")) )
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.

__gn_certaines_des_1m__
    certaines  des  *WORD
        <<- /gn/ morph(\3, ":[NA].*:m", ":[efGW]") -1>> certains                            # Accord de genre erroné : « \3 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\3) -3>> =suggFemPlur(\3, True)                    # Accord de genre erroné : « \1 » est un déterminant féminin.

TEST: Certaines {{danse}}
TEST: Certains {{chien}}
TEST: {{certains}} des {{nouvelles}} sont à côté de la plaque.
TEST: {{certaines}} des hommes
TEST: Un problème rapporté par certains est l’incapacité à trouver un partenaire


## quel / quels / quelle / quelles
__gn_quel_1m__
    quel  *WORD
        <<- /gn/ morph(\2, ":[NA].*:f:p", ":(?:V0|Oo|[NA].*:[me]:[si])")        -1>> quelles                    # Accord de genre et de nombre erroné : « \2 » est féminin et au pluriel.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggMasSing(\2, True)     # Accord de genre et de nombre erroné : « \1 » est masculin et au singulier.
        <<- /gn/ morph(\2, ":[NA].*:m:p", ":(?:V0|Oo|[NA].*:[me]:[si])")        -1>> quels                      # Accord de nombre erroné : « \2 » est au pluriel.
        <<- /gn/ __also__                                                       -2>> =suggSing(\2)              # Accord de nombre erroné : « \1 » est au singulier.
        <<- /gn/ morph(\2, ":[NA].*:f:[si]", ":(?:V0|Oo|[NA].*:[me]:[si])")     -1>> quelle                     # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggMasSing(\2, True)     # Accord de genre erroné : « \1 » est masculin.

__gn_quels_1m__
    quels  *WORD
        <<- /gn/ morph(\2, ":[NA].*:f:s", ":(?:V0|Oo|[NA].*:[me]:[pi])")        -1>> quelle                     # Accord de genre et de nombre erroné : « \2 » est féminin et au singulier.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggMasPlur(\2, True)     # Accord de genre et de nombre erroné : « \1 » est masculin et au pluriel.
        <<- /gn/ morph(\2, ":[NA].*:m:s", ":(?:V0|Oo|[NA].*:[me]:[pi])")        -1>> quel                       # Accord de nombre erroné : « \2 » est au singulier.
        <<- /gn/ __also__                                                       -2>> =suggPlur(\2)              # Accord de nombre erroné : « \1 » est au pluriel.
        <<- /gn/ morph(\2, ":[NA].*:f:[pi]", ":(?:V0|Oo|[NA].*:[me]:[pi])")     -1>> quelles                    # Accord de genre erroné : « \2 » est féminin.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggMasPlur(\2, True)     # Accord de genre erroné : « \1 » est masculin.

__gn_quelle_1m__
    quelle  *WORD
        <<- /gn/ morph(\2, ":[NA].*:m:p", ":(?:V0|Oo|[NA].*:[fe]:[si])")        -1>> quels                      # Accord de genre et de nombre erroné : « \2 » est masculin et au pluriel.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemSing(\2, True)     # Accord de genre et de nombre erroné : « \1 » est féminin et au singulier.
        <<- /gn/ morph(\2, ":[NA].*:f:p", ":(?:V0|Oo|[NA].*:[fe]:[si])")        -1>> quelles                    # Accord de nombre erroné : « \2 » est au pluriel.
        <<- /gn/ __also__                                                       -2>> =suggSing(\2)              # Accord de nombre erroné : « \1 » est au singulier.
        <<- /gn/ morph(\2, ":[NA].*:m:[si]", ":(?:V0|Oo|[NA].*:[fe]:[si])")     -1>> quel                       # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemSing(\2, True)     # Accord de genre erroné : « \1 » est féminin.

__gn_quelles_1m__
    quelles  *WORD
        <<- /gn/ morph(\2, ":[NA].*:m:s", ":(?:V0|Oo|[NA].*:[fe]:[pi])")        -1>> quel                       # Accord de genre et de nombre erroné. « \2 » est masculin et au singulier.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemPlur(\2, True)     # Accord de genre et de nombre erroné : « \1 » est féminin et au pluriel.
        <<- /gn/ morph(\2, ":[NA].*:f:s", ":(?:V0|Oo|[NA].*:[fe]:[pi])")        -1>> quelle                     # Accord de nombre erroné : « \2 » est au singulier.
        <<- /gn/ __also__                                                       -2>> =suggPlur(\2)              # Accord de nombre erroné : « \1 » est au pluriel.
        <<- /gn/ morph(\2, ":[NA].*:m:[pi]", ":(?:V0|Oo|[NA].*:[fe]:[pi])")     -1>> quels                      # Accord de genre erroné : « \2 » est masculin.
        <<- /gn/ __also__ and hasFemForm(\2)                                    -2>> =suggFemPlur(\2, True)     # Accord de genre erroné : « \1 » est féminin.

TEST: {{Quelle}} homme.                                       ->> Quel
TEST: {{Quel}} femme.                                         ->> Quelle
TEST: {{Quels}} chanson.                                      ->> Quelle
TEST: {{Quelles}} {{tarés}}.
TEST: Quelle sale journée…
................................................................................
__gn_quels_quelles_accord_être__
    [quels|quelles]  [est|étais|était|sera|serais|serait|fut|fût|fus]
        <<- /gn/ not value(<1, "|tels|telles|")
        -1>> =\1[:-1]                                                                       # Accord de nombre erroné avec “\2”.

__gn_quel_accord_être_sujet__
    quel  [est|était|seras|sera|serais|serait|fut|fût|fus]  [la|cette|mon|ton|son|ma|ta|sa|notre|votre|leur]  *WORD
        <<- /gn/ not value(<1, "|tel|telle|") and morph(\4, ":[NA].*:f", ":[me]")
        -1>> quelle                                                                         # Accord de genre erroné avec « \3 \4 ».

__gn_quelle_accord_être_sujet__
    quelle  [est|était|seras|sera|serais|serait|fut|fût|fus]  [le|ce|cet|mon|ton|son|notre|votre|leur]  *WORD
        <<- /gn/ not value(<1, "|tel|telle|") and morph(\4, ":[NA].*:m", ":[fe]")
        -1>> quel                                                                           # Accord de genre erroné avec « \3 \4 ».

__gn_quels_accord_être_sujet__
    quels  [sont|étaient|seront|serons|seraient|furent|fussent]  [les|ces|mes|tes|ses|nos|vos|leurs]  *WORD
        <<- /gn/ not value(<1, "|tels|telles|") and morph(\4, ":[NA].*:f", ":[me]")
        -1>> quelles                                                                        # Accord de genre erroné avec « \3 \4 ».

__gn_quelles_accord_être_sujet__
    quelles  [sont|étaient|seront|serons|seraient|furent|fussent]  [les|ces|mes|tes|ses|nos|vos|leurs]  *WORD
        <<- /gn/ not value(<1, "|tels|telles|") and morph(\4, ":[NA].*:m", ":[fe]")
        -1>> quels                                                                          # Accord de genre erroné avec « \3 \4 ».

TEST: {{Quel}} sont ces hommes.                               ->> Quels
TEST: {{Quel}} est cette force ?                              ->> Quelle
TEST: {{Quelle}} est mon animal favori ?                      ->> Quel
TEST: {{Quels}} sont ces femmes ?                             ->> Quelles
TEST: {{Quelles}} est cette imbécillité ?                     ->> Quelle
................................................................................
TEST: des {{son}} que nous entendons jour et nuit.
TEST: j’entends ces {{même}} âneries tous les jours


## Pluriel des groupes
__gn_nombre_de_1m__
    nombre  [de|d’]  *WORD
        <<- /gn/ (morph(\3, ":[NA].*:s", ":[ip]|>o(?:nde|xydation|r)/") and morph(<1, ":(?:G|[123][sp])|<start>", ":[AD]"))
            or \3 in aREGULARPLURAL
        -3>> =suggPlur(\3)                                                                  # Ici, « nombre de » devrait probablement être suivi d’un pluriel.

TEST: Je connais nombre d’{{emmerdeur}} et aucun n’est pire que lui.


__gn_det_groupe_de_1m__
    [un|une|le|la|ce|cette|mon|ton|son|ma|ta|sa|les|ces|des|mes|tes|ses|nos|vos|leurs|quelques]  [>centaine|>millier|>million|>milliard|>dixaine|>douzaine|>multitude|>horde]  [de|d’]  *WORD
        <<- /gn/ morph(\4, ":[NA].*:s", ":[ip]") or \4 in aREGULARPLURAL
        -4>> =suggPlur(\4)                                                                  # Avec des « \2 \3 \4 », mettre au pluriel.

TEST: des centaines de {{bête}} à cornes passèrent devant nous.     ->> bêtes
TEST: une multitude d’{{homme}}                                     ->> hommes


## quelque adverbe
................................................................................
TEST: les quelque 2,5 millions d’habitants
TEST: les quelque 12 000 stations-service


## Nombres
__gn_nombre_lettres_1m__
    @:B:e:p  *WORD
        <<- /gn/ not value(\1, "|neuf|mille|") and ( (morph(\2, ":[NA].*:s", "*") and not value(\2, "|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|") )
            or \2 in aREGULARPLURAL)
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

    neuf  *WORD
        <<- /gn/ ( morph(\2, ":[NA].*:s", "*") and not morph(<1, ":N.*:m:[is]") and not value(\2, "|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|") )
            or \2 in aREGULARPLURAL
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

    mille  *WORD
        <<- /gn/ (morph(\2, ":[NA].*:s", "*") or \1 in aREGULARPLURAL) and not value(<1, "|le|un|ce|du|")
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné avec « \1 » : « \2 » devrait être au pluriel.

TEST: ce sont trois {{idiot}} pas foutus de trouver leur chemin avec un GPS.
TEST: Il a abandonné neuf {{enfant}}.
TEST: On peut trouver mille {{travailleur}} d’un claquement de doigts.
TEST: un logement neuf bâti par des professionnels.
TEST: un mille marin.
................................................................................


__gn_nombre_chiffres_1m__
    [0|1|01]  @:[NAQ].*:p¬*
        <<- /gn/ not value(\2, "|Rois|Corinthiens|Thessaloniciens|") -2>> =suggSing(\2)     # Accord de nombre erroné : « \1 » devrait être au singulier.

    ~^\d+$  *WORD
        <<- /gn/ not value(<1, "|/|") and not re.search("^0*[01]$", \1)
            and ( (morph(\2, ":[NA].*:s", "*") and not value(\2, "|janvier|février|mars|avril|mai|juin|juillet|août|aout|septembre|octobre|novembre|décembre|rue|route|ruelle|place|boulevard|avenue|allée|chemin|sentier|square|impasse|cour|quai|chaussée|côte|vendémiaire|brumaire|frimaire|nivôse|pluviôse|ventôse|germinal|floréal|prairial|messidor|thermidor|fructidor|"))
            or \1 in aREGULARPLURAL )
        -2>> =suggPlur(\2)                                                                  # Accord de nombre erroné : « \2 » devrait être au pluriel.

TEST: 00 heure, 01 heure
TEST: il a adopté 1 {{chiens}}.
TEST: 22 {{heure}}
TEST: 3 {{heure}}


##  trouver ça/ceci/cela + adj
__gn_trouver_ça_adj__
    >trouver  [ça|cela|ceci]  @:A.*:(?:f|m:p)¬:(?:G|3[sp]|M)
        <<- /gn/ -3>> =suggMasSing(\3)                                              # Trouver \2 + [adjectif] : l’adjectif s’accorde avec “\2” (au masculin singulier).

TEST: ils trouvent ça de plus en plus {{idiots}}              ->> idiot


!!
!!
................................................................................
TEST: avec {{grand}} {{industrie}}
TEST: sur {{petite}} {{pied}}
TEST: Après être demeurée assise pendant quelque temps, elle se leva
TEST: ils choisissent de devenir indépendants


__gn_de_manière_façon_1m__
    de  [manière|façon]  @:A.*:(?:m|f:p)¬:[GM]
        <<- /gn/ -3>> =suggFemSing(\3)                                                              # Accord erroné avec “\2” : l’adjectif devrait être au féminin singulier.

TEST: il fit cela tans de fois et avec brio de manière {{élégant}}.
TEST: elle s’y prit avec cet individu de façon {{charmant}}.


@@@@