Grammalecte  Check-in [8f279e11da]

Overview
Comment:[fr] ajustements
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | fr
Files: files | file ages | folders
SHA3-256: 8f279e11da559a18627c46458b8b4b81ced50fa2a5a3f4fd7adedb5a7df46dc7
User & Date: olr on 2020-09-18 14:22:23
Other Links: manifest | tags
Context
2020-09-18
14:23
[fr] genfrdic.py: update tags check-in: 38038348fd user: olr tags: fr, trunk
14:22
[fr] ajustements check-in: 8f279e11da user: olr tags: fr, trunk
2020-09-16
08:05
[fr] remove print() in tests check-in: 32d1eab202 user: olr tags: fr, trunk
Changes

Modified gc_lang/fr/rules.grx from [e8cb50033b] to [d89197aa8f].

3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
....
4358
4359
4360
4361
4362
4363
4364

4365
4366
4367
4368
4369
4370
4371
....
4402
4403
4404
4405
4406
4407
4408
4409
4410
4411
4412
4413
4414
4415
4416
....
9851
9852
9853
9854
9855
9856
9857
9858
9859
9860
9861
9862
9863
9864
9865
9866
9867
9868
9869
9870
9871
.....
11240
11241
11242
11243
11244
11245
11246

11247
11248
11249
11250
11251
11252
11253
11254
11255
11256
11257
11258



11259
11260
11261
11262
11263
11264
11265
.....
11617
11618
11619
11620
11621
11622
11623




11624
11625
11626
11627
11628
11629
11630

11631
11632
11633
11634
11635
11636
11637
.....
14952
14953
14954
14955
14956
14957
14958

14959
14960
14961
14962
14963
14964
14965
.....
15247
15248
15249
15250
15251
15252
15253
15254
15255
15256
15257
15258
15259
15260
15261
.....
16275
16276
16277
16278
16279
16280
16281

16282
16283
16284

16285

16286
16287
16288
16289
16290
16291
16292
.....
16626
16627
16628
16629
16630
16631
16632

16633
16634
16635
16636
16637
16638
16639
.....
17828
17829
17830
17831
17832
17833
17834

17835
17836
17837
17838
17839
17840
17841
.....
18210
18211
18212
18213
18214
18215
18216

18217
18218
18219
18220
18221
18222
18223
.....
21260
21261
21262
21263
21264
21265
21266











21267
21268
21269
21270
21271
21272
21273
21274
21275
21276
21277
21278
21279
21280
21281
21282
21283
21284
21285
21286
21287
21288
21289
21290
21291
21292
21293
21294
21295
21296
21297
21298
21299
21300
21301
21302
21303
21304
21305



















21306
21307
21308
21309
21310
21311
21312
.....
21315
21316
21317
21318
21319
21320
21321
21322
21323
21324
21325
21326
21327
21328
21329
21330
21331
21332
21333
21334
21335
21336
21337
21338
21339
21340
21341








21342
21343
21344
21345
21346
21347
21348
.....
21379
21380
21381
21382
21383
21384
21385
21386
21387
21388





21389
21390
21391
21392
21393



21394
21395
21396
21397
21398
21399
21400
.....
21478
21479
21480
21481
21482
21483
21484
21485
21486
21487
21488
21489
21490
21491
21492
.....
21621
21622
21623
21624
21625
21626
21627
21628
21629
21630
21631
21632
21633
21634
21635
21636
21637
21638
21639
21640
21641
21642
21643
21644
21645
21646
21647
21648
21649
21650
21651
21652
21653
21654
21655
21656
21657
21658
21659
21660
.....
21705
21706
21707
21708
21709
21710
21711


































































21712
21713
21714
21715
21716
21717
21718
.....
29033
29034
29035
29036
29037
29038
29039
29040
29041
29042
29043
29044
29045
29046
29047
29048
29049
29050
29051
29052
29053
29054
29055
        <<- /ocr/ ->> fut                                                                           && Erreur de numérisation ?

TEST: __ocr__ ce petit {{rut}} traité comme un chien


# il / n / ils / U / Us / i1 / if / 11
__ocr_il__
    [<start>|,|(]  [n|h|d]  ~^[bcdfghjklmnpqrstvwxz]
        <<- /ocr/ morph(\3, ":(?:O[on]|3s)") -2>> il                                                && Erreur de numérisation ?

    [U|if|i1]
        <<- /ocr/ ->> Il|il                                                                         && Erreur de numérisation ?

    [Us|ifs|i1s]
        <<- /ocr/ ->> Ils|ils                                                                       && Erreur de numérisation ?
................................................................................
        <<- /tu/ not(\2 == "forme" and value(>1, "|de|d’|")) and morph(<1, ":D") and analyse_with_next(\1, "-", ":")
        ->> \1-\2                                                                                   && Il manque probablement un trait d’union.

TEST: il a pris une balle dans l’{{arrière train}}.
TEST: Ce {{sans gêne}} mérite une bonne leçon
TEST: une {{sous culture}} passée de mode
TEST: l’{{avant train}}

TEST: Sans gêne, il avança parmi nous.


__tu_préfixe_pseudo__
    pseudo  $:N¬*
        <<- /tu/ ->> pseudo-\2                                                                      && Si vous voulez évoquer le simulacre de “\2”, mettez un trait d’union.
        <<- ~1>> *
................................................................................

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


__tu_mots_grammaticaux__
    au [delà|dehors|dessous|dessus|devant]
        <<- /tu/ \2.islower() ->> \1-\2                         && Il manque un trait d’union.

................................................................................
        <<- /conf/ -2>> =\1.replace("û", "u")                                                       && Confusion. Le jeûne est une privation de nourriture.|https://fr.wiktionary.org/wiki/jeune

TEST: Très {{jeûne}}, elle a su qu’elle ne voulait pas d’une vie ordinaire.


# la / l’a
__conf_il_elle_on_la_l_a_vconj__
    [il|elle|on|iel]  ?[nous|vous]¿  l’  a  ~^[bcdfghjklmnpqrstvwxz]
        <<- /conf/ morph(\-1, ":[123][sp]", ":[GQ]") --3:-2>> la                && Confusion probable. Pour un pronom objet féminin, écrivez “la”.

    [ne|me|te|se]  l’ a  ~^[bcdfghjklmnpqrstvwxz]
        <<- /conf/ morph(\4, ":[123][sp]", ":[GQ]") -2:3>> la                   && Confusion probable. Pour un pronom objet féminin, écrivez “la”.

    ne  [nous|vous]  l’ a  ~^[bcdfghjklmnpqrstvwxz]
        <<- /conf/ morph(\5, ":[123][sp]", ":[GQ]") -3:4>> la                   && Confusion probable. Pour un pronom objet féminin, écrivez “la”.

    ne l’ a [lui|leur]
        <<- /conf/ -2:3>> la                                                    && Confusion probable. Pour un pronom objet féminin, écrivez “la”.

TEST: on {{l’a}} {{prit}} pour une idiote.
TEST: elle se {{l’a}} {{réserve}} pour elle-même.
................................................................................
TEST: je crois qu’elle seule peut y parvenir
TEST: Elle cache qu’elle a été en prison.
TEST: Qu’elle avait été accueillie avec joie.


__conf_quelle_qu_elle__
    quelle  [ne|n’|me|m’|te|t’|se|s’|nous|vous|le|la|l’|les|lui|leur|en|y]

        <<- /conf/ not (value(\2, "|en|ne|")  and morph(>1, ":V0e")) -1>> qu’elle                   && Confusion. Le sujet “elle” doit être séparée de la conjonction “que”.

    quelle  @:V¬:[NA].*:[fe]|>(?:être|plus|point)/
        <<- /conf/ \2.islower() and not (morph(\2, ">(?:pouvoir|devoir|aller)/") and (morph(>1, ":V0e") or morph(>2, ":V0e"))) and not (morph(\2, ":V0a") and value(>1, "|été|"))
        -1>> qu’elle                                                                                && Confusion. Le sujet “elle” doit être séparée de la conjonction “que”.

TEST: {{Quelle}} y vienne, on verra ce qu’elle vaut.
TEST: {{Quelle}} a du répondant, cette gamine !
TEST: {{Quelle}} allât prendre son repas à la cantine, je n’en avais cure.
TEST: Il se plaint {{quelle}} ne nous dit rien.
TEST: {{Quelle}} l’apprenne un jour, on n’y peut rien.
TEST: Je crois {{quelle}} n’en sait pas assez pour nous nuire.





    quelles [ne|n’|me|m’|te|t’|se|s’|nous|vous|le|la|l’|les|lui|leur|en|y]
        <<- /conf/ not (value(\2, "|en|ne|") and morph(>1, ":V0e")) -1>> qu’elles                   && Confusion. Le sujet “elles” doit être séparée de la conjonction “que”.

    quelles @:V¬:[NA].*:[fe]|>(?:être|plus|point)/
        <<- /conf/ \2.islower() and not (morph(\2, ">(?:pouvoir|devoir|aller)/") and (morph(>1, ":V0e") or morph(>2, ":V0e"))) and not (morph(\2, ":V0a") and value(>1, "|été|"))
................................................................................

    [soi|sois|soit|>soie]  >même
        <<- /conf/ morph(<1, ":[YQ]|>(?:avec|contre|par|pour|sur)/|<start>|>,") ->> soi-même        && Confusion probable : moi-même, toi-même, lui-même, elle-même, soi-même, elles-mêmes, eux-mêmes.

    [sois-même|soit-même|soie-même|soies-même|soi-mêmes|sois-mêmes|soit-mêmes|soie-mêmes|soies-mêmes]
        <<- /conf/ ->> soi-même                                                                     && Confusion : moi-même, toi-même, lui-même, elle-même, soi-même, elles-mêmes, eux-mêmes.





TEST: chez {{soit}}, c’est presque toujours mieux.
TEST: ce n’est pas la philosophie en {{soit}} qui est problématique
TEST: quel que {{soie}} sa pensée, je refuse d’y accorder de l’attention.
TEST: Penser par {{soit même}}…
TEST: S’aimer {{soit-même}}, c’est le début d’une grande histoire d’amour. (Oscar Wilde)
TEST: pas sûr que {{sa}} {{soi}} terminé avant demain
TEST: Cela va presque de {{soit}}

TEST: Je regrette que l’on en soit encore à des considérations que je croyais dépassées
TEST: Quoi qu’il en soit
TEST: À moins qu’elle n’en soit la victime.
TEST: Je doute qu’il s’en soit sorti si aisément.
TEST: Je refuse, quoi qu’il en soit.
TEST: on ne s’étonne plus que le parquet de Paris en soit à agir sous l’effet de quelque urgence médiatique
TEST: Vous êtes soit pour soit contre, mais pas les deux en même temps
................................................................................
    en dernier [lieu|recours|ressort]
    en dépit du bon sens ?[commun|élémentaire]¿
    en dépit du bon sens le plus [commun|élémentaire]
    en désespoir [de|d’] cause
    en détention provisoire
    en direction [de|d’] l’ [est|ouest]
    en direction du [nord|nord-est|nord-ouest|sud|sud-est|sud-ouest]

    en eau ?peu¿ profonde
    en eaux troubles
    en état [de|d’] choc ?circulatoire¿
    en ?[excellent|mauvais|parfait]¿ état [de|d’] [fonctionnement|marche]
    en état d’ ébriété ?avancée¿
    en ?[assez|si|très|trop]¿ excellent état ?général¿
    en ?[assez|si|très|trop]¿ fâcheuse posture
................................................................................
    que tu [le|l’] veuilles ou non
    qu’ [il|elle|on|iel] [le|l’] veuille ou non
    que vous [le|l’] vouliez ou non
    que nous [le|l’] voulions ou non
    qu’ [ils|elles|iels] [le|l’] veuillent ou non
    qu’ à cela ne tienne
    quel qu’ en soit [le|l’] [moyen|prix|danger]
    quel qu’ en soit [le|l’] risque ?financier¿
    quelle qu’ en soit la [cause|raison]
    quelque peu
    ?[de|d’]¿ quelque part
    qui plus est
    quoi qu’ il [arrive|arrivât|advienne|advînt]
    quoi qu’ il soit [arrivé|advenu]
    quoi qu’ il en [coûte|coûtât|coute|coutât]
................................................................................
    >frayeur [de|d’] tous les diables
    >frein à >tambour
    >frousse [de|d’] tous les diables
    >fuite en avant
    >fusée [de|d’] détresse
    >fusil à [lunette|plomb|pompe]
    >gala [de|d’] charité

    >garde à vue
    >garde du corps
    gaz à >effet [de|d’] serre

    >genou à terre

    >geste >barrière
    >gilet [de|d’] sauvetage
    >gouvernement d’ union nationale
    >grain [de|d’] [blé|maïs|sable]
    >grenouille [de|d’] bénitier
    >grève [de|d’] la faim
    >groupe [de|d’] [discussion|parole|prière|pression|travail]
................................................................................
    vacances d’ [automne|été|hiver]
    >vache à lait
    >vague à l’ âme
    >vecteur [>accélération|>position|>rotation|>vitesse]
    >véhicule [de|d’] location
    >vente à [découvert|domicile|emporter]
    >vente aux enchères

    >vérification [de|d’] routine
    vernis à ongles
    >ver [de|d’] terre
    >verre à pied
    >vêtement [de|d’] rechange
    >vidéo X
    >vie [de|d’] bohème
................................................................................
    >tenir au courant
    >tenir en haute estime
    >tenir en retrait
    >tirer [avantage|profit]
    >tirer à blanc
    >tomber à [pic|point]
    >tourner à l’ aigre

    >tourner court
    >trainer en longueur
    >traîner en longueur
    >trier sur le volet
    >trouver refuge
    >vendre à perte
    >venir à bout
................................................................................
    >saigner a blanc
    >sentir a l’ aise
    >tenir a [carreau|cœur|distance]
    >tirer a blanc
    >tomber a [pic|point|terre]
    >tirer a blanc
    >tourner a l’ aigre

    >vendre a >perte
    >venir a bout
    [>venir|>revenir] a point
        <<- /conf/ -2>> à                                                   && Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|https://fr.wiktionary.org/wiki/%C3%A0

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

TEST: cet outil {{terribles}} qu’il a dans les mains
TEST: J’aimerais connaître de quel parti {{gauchistes}} on parle.
TEST: au petit {{publique}}
TEST: Ils jugeront en toute impartialité de ce cas {{délirante}}.













__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").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
TEST: {{ton}} {{belle}} mémoire
TEST: {{mon}} {{chienne}}


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

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

TEST: il brandissait avec fougue son drapeau {{déchirés}}
TEST: comment osez-vous médire de mon héritage {{glorieuse}}
TEST: on parlait de son escapade {{éperdu}} au milieu de la nuit.
TEST: ton étonnante {{secret}} ne sera pas au programme.
TEST: elle s’étonnait de ton opposition {{grandissantes}}
TEST: le ton monte.





















__gn_ma_ta_sa_1m__
    [ma|ta|sa]  *WORD
        <<- not (tag(\1, "_CAP_") and morph(\1, ":N")) >>>
        <<- /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.
................................................................................
TEST: {{ma}} {{parti}}
TEST: {{ma}} amour                                            ->> mon
TEST: ma {{carlingues}}
TEST: Après cet épisode, la SA a joué un rôle marginal dans l’histoire du Troisième Reich


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

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

TEST: quelle belle {{étourdi}}, cette gamine
TEST: j’en ai assez de cette ville {{stressées}} en permanence.
TEST: Peut-on imaginer de plus {{beaux}} {{enfant}} ?
TEST: de ma grande {{ami}}
TEST: il fut cette fois ulcéré de voir son entreprise une fois de plus ruinée par la malchance.










__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.
TEST: que faire de votre {{ennuyeuse}} {{avocat}}
TEST: de quelque cartable {{vides}}
TEST: de notre petit {{amis}}
TEST: Quelque chose tombé dans le puits a souillé l’eau.


__gn_det_sing_3m__
    [ledit|ladite|un|une|ce|cet|cette|mon|ton|son|ma|ta|sa|notre|votre|au|quel|quelle|dudit]  *WORD  *WORD  *WORD
        <<- /gn/ not value(<1, "|et|ou|") and morph(\2, ":[NA].*:[si]") and morph(\3, ":[NA].*:[si]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NA].*:p", "*") and \4.islower()





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

TEST: un gros connard {{pathétiques}}
TEST: servi pas un style et une exigence historique remarquables
TEST: ils eurent besoins d’au minimum cent ans pour s’en remettre





## Pluriels

__gn_les_1m__
    ,  les  *WORD
        <<- /gn/ morph(\3, ":[NA].*:s", "*") and not (value(>1, "|et|ou|") and morph(>2, ":[NA]"))
................................................................................
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]"))
        -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 singulier.
        <<- /gn/ __else__ -1>> ce                                                           && Accord de nombre erroné : « \2 » est au singulier.

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

TEST: plusieurs {{femme}}
TEST: plusieurs {{foi}} par jour.
TEST: plusieurs {{abricot}}


__gn_les_3m__
    les  *WORD  *WORD  *WORD
        <<- /gn/ morph(\1, ":D") and morph(\2, ":[NA].*:[pi]", ":(?:[123][sp]|G)") and morph(\3, ":[NA].*:[pi]", ":(?:[123][sp]|G)") and morph(\4, ":[NA].*:s", "*") and \4.islower()
        -4>> =suggPlur(\4)                                                                  && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au pluriel.

TEST: les heureux imbéciles {{payé}} au lance-pierre.


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

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

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


## 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]"))
................................................................................

TEST: {{maints}} {{petites}}
TEST: Maintes {{danse}}
TEST: Maints {{chien}}
TEST: {{maintes}} {{petits}}
TEST: Un problème rapporté par maints 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.
................................................................................
TEST: Le sentiment d’humiliation, la colère nous indiquent que…
TEST: la majorité survenaient sous la contrainte
TEST: la plupart avançaient en rangs serrés
TEST: un grand nombre avaient été humiliés par ces pratiques délétères


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

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








|







 







>







 







<







 







|


|


|







 







>
|











>
>
>







 







>
>
>
>







>







 







>







 







|







 







>



>

>







 







>







 







>







 







>







 







>
>
>
>
>
>
>
>
>
>
>




|











|

|

|




|

|

|









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







 







|






|












>
>
>
>
>
>
>
>







 







|
|
|
>
>
>
>
>


<
<
<
>
>
>







 







|







 







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







 







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







 







|







|







3167
3168
3169
3170
3171
3172
3173
3174
3175
3176
3177
3178
3179
3180
3181
....
4358
4359
4360
4361
4362
4363
4364
4365
4366
4367
4368
4369
4370
4371
4372
....
4403
4404
4405
4406
4407
4408
4409

4410
4411
4412
4413
4414
4415
4416
....
9851
9852
9853
9854
9855
9856
9857
9858
9859
9860
9861
9862
9863
9864
9865
9866
9867
9868
9869
9870
9871
.....
11240
11241
11242
11243
11244
11245
11246
11247
11248
11249
11250
11251
11252
11253
11254
11255
11256
11257
11258
11259
11260
11261
11262
11263
11264
11265
11266
11267
11268
11269
.....
11621
11622
11623
11624
11625
11626
11627
11628
11629
11630
11631
11632
11633
11634
11635
11636
11637
11638
11639
11640
11641
11642
11643
11644
11645
11646
.....
14961
14962
14963
14964
14965
14966
14967
14968
14969
14970
14971
14972
14973
14974
14975
.....
15257
15258
15259
15260
15261
15262
15263
15264
15265
15266
15267
15268
15269
15270
15271
.....
16285
16286
16287
16288
16289
16290
16291
16292
16293
16294
16295
16296
16297
16298
16299
16300
16301
16302
16303
16304
16305
.....
16639
16640
16641
16642
16643
16644
16645
16646
16647
16648
16649
16650
16651
16652
16653
.....
17842
17843
17844
17845
17846
17847
17848
17849
17850
17851
17852
17853
17854
17855
17856
.....
18225
18226
18227
18228
18229
18230
18231
18232
18233
18234
18235
18236
18237
18238
18239
.....
21276
21277
21278
21279
21280
21281
21282
21283
21284
21285
21286
21287
21288
21289
21290
21291
21292
21293
21294
21295
21296
21297
21298
21299
21300
21301
21302
21303
21304
21305
21306
21307
21308
21309
21310
21311
21312
21313
21314
21315
21316
21317
21318
21319
21320
21321
21322
21323
21324
21325
21326
21327
21328
21329
21330
21331
21332
21333
21334
21335
21336
21337
21338
21339
21340
21341
21342
21343
21344
21345
21346
21347
21348
21349
21350
21351
21352
21353
21354
21355
21356
21357
21358
.....
21361
21362
21363
21364
21365
21366
21367
21368
21369
21370
21371
21372
21373
21374
21375
21376
21377
21378
21379
21380
21381
21382
21383
21384
21385
21386
21387
21388
21389
21390
21391
21392
21393
21394
21395
21396
21397
21398
21399
21400
21401
21402
.....
21433
21434
21435
21436
21437
21438
21439
21440
21441
21442
21443
21444
21445
21446
21447
21448
21449



21450
21451
21452
21453
21454
21455
21456
21457
21458
21459
.....
21537
21538
21539
21540
21541
21542
21543
21544
21545
21546
21547
21548
21549
21550
21551
.....
21680
21681
21682
21683
21684
21685
21686


























21687
21688
21689
21690
21691
21692
21693
.....
21738
21739
21740
21741
21742
21743
21744
21745
21746
21747
21748
21749
21750
21751
21752
21753
21754
21755
21756
21757
21758
21759
21760
21761
21762
21763
21764
21765
21766
21767
21768
21769
21770
21771
21772
21773
21774
21775
21776
21777
21778
21779
21780
21781
21782
21783
21784
21785
21786
21787
21788
21789
21790
21791
21792
21793
21794
21795
21796
21797
21798
21799
21800
21801
21802
21803
21804
21805
21806
21807
21808
21809
21810
21811
21812
21813
21814
21815
21816
21817
.....
29132
29133
29134
29135
29136
29137
29138
29139
29140
29141
29142
29143
29144
29145
29146
29147
29148
29149
29150
29151
29152
29153
29154
        <<- /ocr/ ->> fut                                                                           && Erreur de numérisation ?

TEST: __ocr__ ce petit {{rut}} traité comme un chien


# il / n / ils / U / Us / i1 / if / 11
__ocr_il__
    [<start>|,|(]  [n|h|d]  ~^[bcçdfghjklmnpqrstvwxz]
        <<- /ocr/ morph(\3, ":(?:O[on]|3s)") -2>> il                                                && Erreur de numérisation ?

    [U|if|i1]
        <<- /ocr/ ->> Il|il                                                                         && Erreur de numérisation ?

    [Us|ifs|i1s]
        <<- /ocr/ ->> Ils|ils                                                                       && Erreur de numérisation ?
................................................................................
        <<- /tu/ not(\2 == "forme" and value(>1, "|de|d’|")) and morph(<1, ":D") and analyse_with_next(\1, "-", ":")
        ->> \1-\2                                                                                   && Il manque probablement un trait d’union.

TEST: il a pris une balle dans l’{{arrière train}}.
TEST: Ce {{sans gêne}} mérite une bonne leçon
TEST: une {{sous culture}} passée de mode
TEST: l’{{avant train}}
TEST: l’{{arrière pensée}}
TEST: Sans gêne, il avança parmi nous.


__tu_préfixe_pseudo__
    pseudo  $:N¬*
        <<- /tu/ ->> pseudo-\2                                                                      && Si vous voulez évoquer le simulacre de “\2”, mettez un trait d’union.
        <<- ~1>> *
................................................................................

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

TEST: entre deux chaises…


__tu_mots_grammaticaux__
    au [delà|dehors|dessous|dessus|devant]
        <<- /tu/ \2.islower() ->> \1-\2                         && Il manque un trait d’union.

................................................................................
        <<- /conf/ -2>> =\1.replace("û", "u")                                                       && Confusion. Le jeûne est une privation de nourriture.|https://fr.wiktionary.org/wiki/jeune

TEST: Très {{jeûne}}, elle a su qu’elle ne voulait pas d’une vie ordinaire.


# la / l’a
__conf_il_elle_on_la_l_a_vconj__
    [il|elle|on|iel]  ?[nous|vous]¿  l’  a  ~^[bcçdfghjklmnpqrstvwxz]
        <<- /conf/ morph(\-1, ":[123][sp]", ":[GQ]") --3:-2>> la                && Confusion probable. Pour un pronom objet féminin, écrivez “la”.

    [ne|me|te|se]  l’ a  ~^[bcçdfghjklmnpqrstvwxz]
        <<- /conf/ morph(\4, ":[123][sp]", ":[GQ]") -2:3>> la                   && Confusion probable. Pour un pronom objet féminin, écrivez “la”.

    ne  [nous|vous]  l’ a  ~^[bcçdfghjklmnpqrstvwxz]
        <<- /conf/ morph(\5, ":[123][sp]", ":[GQ]") -3:4>> la                   && Confusion probable. Pour un pronom objet féminin, écrivez “la”.

    ne l’ a [lui|leur]
        <<- /conf/ -2:3>> la                                                    && Confusion probable. Pour un pronom objet féminin, écrivez “la”.

TEST: on {{l’a}} {{prit}} pour une idiote.
TEST: elle se {{l’a}} {{réserve}} pour elle-même.
................................................................................
TEST: je crois qu’elle seule peut y parvenir
TEST: Elle cache qu’elle a été en prison.
TEST: Qu’elle avait été accueillie avec joie.


__conf_quelle_qu_elle__
    quelle  [ne|n’|me|m’|te|t’|se|s’|nous|vous|le|la|l’|les|lui|leur|en|y]
        <<- /conf/ not (value(\2, "|en|ne|n’|") and morph(>1, ":V0e")) and not after("^ *(?:a|avait|eut|eût|aura|aurait) +(?:pas|) +été")
        -1>> qu’elle                && Confusion. Le sujet “elle” doit être séparée de la conjonction “que”.

    quelle  @:V¬:[NA].*:[fe]|>(?:être|plus|point)/
        <<- /conf/ \2.islower() and not (morph(\2, ">(?:pouvoir|devoir|aller)/") and (morph(>1, ":V0e") or morph(>2, ":V0e"))) and not (morph(\2, ":V0a") and value(>1, "|été|"))
        -1>> qu’elle                                                                                && Confusion. Le sujet “elle” doit être séparée de la conjonction “que”.

TEST: {{Quelle}} y vienne, on verra ce qu’elle vaut.
TEST: {{Quelle}} a du répondant, cette gamine !
TEST: {{Quelle}} allât prendre son repas à la cantine, je n’en avais cure.
TEST: Il se plaint {{quelle}} ne nous dit rien.
TEST: {{Quelle}} l’apprenne un jour, on n’y peut rien.
TEST: Je crois {{quelle}} n’en sait pas assez pour nous nuire.
TEST: Quelle n’a pas été ma surprise
TEST: quelle ne fut pas ma surprise
TEST: quelle en était la cause ?


    quelles [ne|n’|me|m’|te|t’|se|s’|nous|vous|le|la|l’|les|lui|leur|en|y]
        <<- /conf/ not (value(\2, "|en|ne|") and morph(>1, ":V0e")) -1>> qu’elles                   && Confusion. Le sujet “elles” doit être séparée de la conjonction “que”.

    quelles @:V¬:[NA].*:[fe]|>(?:être|plus|point)/
        <<- /conf/ \2.islower() and not (morph(\2, ">(?:pouvoir|devoir|aller)/") and (morph(>1, ":V0e") or morph(>2, ":V0e"))) and not (morph(\2, ":V0a") and value(>1, "|été|"))
................................................................................

    [soi|sois|soit|>soie]  >même
        <<- /conf/ morph(<1, ":[YQ]|>(?:avec|contre|par|pour|sur)/|<start>|>,") ->> soi-même        && Confusion probable : moi-même, toi-même, lui-même, elle-même, soi-même, elles-mêmes, eux-mêmes.

    [sois-même|soit-même|soie-même|soies-même|soi-mêmes|sois-mêmes|soit-mêmes|soie-mêmes|soies-mêmes]
        <<- /conf/ ->> soi-même                                                                     && Confusion : moi-même, toi-même, lui-même, elle-même, soi-même, elles-mêmes, eux-mêmes.

    [entre-soit|entre-sois|entre-soie+s]
        <<- /conf/ ->> entre-soi
        && Confusion : pour évoquer la situation où l’on ne rencontre que des gens proche de soi, écrivez “entre-soi”.|https://fr.wiktionary.org/wiki/entre-soi

TEST: chez {{soit}}, c’est presque toujours mieux.
TEST: ce n’est pas la philosophie en {{soit}} qui est problématique
TEST: quel que {{soie}} sa pensée, je refuse d’y accorder de l’attention.
TEST: Penser par {{soit même}}…
TEST: S’aimer {{soit-même}}, c’est le début d’une grande histoire d’amour. (Oscar Wilde)
TEST: pas sûr que {{sa}} {{soi}} terminé avant demain
TEST: Cela va presque de {{soit}}
TEST: l’{{entre-soit}}                                                                          ->> entre-soi
TEST: Je regrette que l’on en soit encore à des considérations que je croyais dépassées
TEST: Quoi qu’il en soit
TEST: À moins qu’elle n’en soit la victime.
TEST: Je doute qu’il s’en soit sorti si aisément.
TEST: Je refuse, quoi qu’il en soit.
TEST: on ne s’étonne plus que le parquet de Paris en soit à agir sous l’effet de quelque urgence médiatique
TEST: Vous êtes soit pour soit contre, mais pas les deux en même temps
................................................................................
    en dernier [lieu|recours|ressort]
    en dépit du bon sens ?[commun|élémentaire]¿
    en dépit du bon sens le plus [commun|élémentaire]
    en désespoir [de|d’] cause
    en détention provisoire
    en direction [de|d’] l’ [est|ouest]
    en direction du [nord|nord-est|nord-ouest|sud|sud-est|sud-ouest]
    en double aveugle
    en eau ?peu¿ profonde
    en eaux troubles
    en état [de|d’] choc ?circulatoire¿
    en ?[excellent|mauvais|parfait]¿ état [de|d’] [fonctionnement|marche]
    en état d’ ébriété ?avancée¿
    en ?[assez|si|très|trop]¿ excellent état ?général¿
    en ?[assez|si|très|trop]¿ fâcheuse posture
................................................................................
    que tu [le|l’] veuilles ou non
    qu’ [il|elle|on|iel] [le|l’] veuille ou non
    que vous [le|l’] vouliez ou non
    que nous [le|l’] voulions ou non
    qu’ [ils|elles|iels] [le|l’] veuillent ou non
    qu’ à cela ne tienne
    quel qu’ en soit [le|l’] [moyen|prix|danger]
    quel qu’ en soit [le|l’] risque ?[économique|financier|légal|juridique|militaire]¿
    quelle qu’ en soit la [cause|raison]
    quelque peu
    ?[de|d’]¿ quelque part
    qui plus est
    quoi qu’ il [arrive|arrivât|advienne|advînt]
    quoi qu’ il soit [arrivé|advenu]
    quoi qu’ il en [coûte|coûtât|coute|coutât]
................................................................................
    >frayeur [de|d’] tous les diables
    >frein à >tambour
    >frousse [de|d’] tous les diables
    >fuite en avant
    >fusée [de|d’] détresse
    >fusil à [lunette|plomb|pompe]
    >gala [de|d’] charité
    >galette des rois
    >garde à vue
    >garde du corps
    gaz à >effet [de|d’] serre
    >général [2|3|4|5|deux|trois|quatre|cinq] étoiles
    >genou à terre
    gens de confiance
    >geste >barrière
    >gilet [de|d’] sauvetage
    >gouvernement d’ union nationale
    >grain [de|d’] [blé|maïs|sable]
    >grenouille [de|d’] bénitier
    >grève [de|d’] la faim
    >groupe [de|d’] [discussion|parole|prière|pression|travail]
................................................................................
    vacances d’ [automne|été|hiver]
    >vache à lait
    >vague à l’ âme
    >vecteur [>accélération|>position|>rotation|>vitesse]
    >véhicule [de|d’] location
    >vente à [découvert|domicile|emporter]
    >vente aux enchères
    >ventilateur à merde
    >vérification [de|d’] routine
    vernis à ongles
    >ver [de|d’] terre
    >verre à pied
    >vêtement [de|d’] rechange
    >vidéo X
    >vie [de|d’] bohème
................................................................................
    >tenir au courant
    >tenir en haute estime
    >tenir en retrait
    >tirer [avantage|profit]
    >tirer à blanc
    >tomber à [pic|point]
    >tourner à l’ aigre
    >tourner à vide
    >tourner court
    >trainer en longueur
    >traîner en longueur
    >trier sur le volet
    >trouver refuge
    >vendre à perte
    >venir à bout
................................................................................
    >saigner a blanc
    >sentir a l’ aise
    >tenir a [carreau|cœur|distance]
    >tirer a blanc
    >tomber a [pic|point|terre]
    >tirer a blanc
    >tourner a l’ aigre
    >tourner a vide
    >vendre a >perte
    >venir a bout
    [>venir|>revenir] a point
        <<- /conf/ -2>> à                                                   && Confusion : “a” est une conjugaison du verbe “avoir”. Pour la préposition, écrivez “à”.|https://fr.wiktionary.org/wiki/%C3%A0

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

TEST: cet outil {{terribles}} qu’il a dans les mains
TEST: J’aimerais connaître de quel parti {{gauchistes}} on parle.
TEST: au petit {{publique}}
TEST: Ils jugeront en toute impartialité de ce cas {{délirante}}.


__gn_det_mas_sing_3m__
    [ledit|un|ce|cet|au|quel|audit|dudit|aucun|nul]  *WORD  *WORD  *WORD
        <<- /gn/ morph(<1, "<start>|:V", "*") and morph(\2, ":[NA].*:[me]:[si]") and morph(\3, ":[NA].*:[me]:[si]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NA].*:[pf]", "*") and \4.islower()
        -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
TEST: {{ton}} {{belle}} mémoire
TEST: {{mon}} {{chienne}}


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

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

TEST: il brandissait avec fougue son drapeau {{déchirés}}
TEST: comment osez-vous médire de mon héritage {{glorieuse}}
TEST: on parlait de son escapade {{éperdu}} au milieu de la nuit.
TEST: ton étonnante {{secret}} ne sera pas au programme.
TEST: elle s’étonnait de ton opposition {{grandissantes}}
TEST: le ton monte.


__gn_det_mon_ton_son_3m__
    [mon|ton|son]  *WORD  *WORD  *WORD
        <<- /gn/ morph(<1, "<start>|:V", "*") and \4.islower() >>>
        <<- /gn/ morph(\2, ">[bcçdfgjklmnpqrstvwxz].*:[NA].*:[me]:[si]") and morph(\3, ":[NA].*:[me]:[si]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NAQ].*:[pf]", "*")
        -4>> =suggMasSing(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au masculin singulier.
        <<- /gn/ re.search("^[aâeéèêiîoôuûyœæ]", \2) >>>
        <<- /gn/ morph(\2, ":[NA].*:m:[si]", ":[fe]") and morph(\3, ":[NA].*:[me]:[si]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NAQ].*:[pf]", "*")
        -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)") and morph(\4, ":[NAQ].*:[pm]", "*")
        -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]") and morph(\3, ":[NA].*:[si]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NAQ].*:p", "*")
        -4>> =suggSing(\4)                                                                  && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au singulier.

TEST: mon petit ami {{décédée}}                                                 ->> décédé
TEST: mon ami proche {{décédée}}                                                ->> décédé
TEST: mon amie proche {{décédé}}                                                ->> décédée
TEST: son addictologue ridicule {{financés}} par l’État                         ->> financé


__gn_ma_ta_sa_1m__
    [ma|ta|sa]  *WORD
        <<- not (tag(\1, "_CAP_") and morph(\1, ":N")) >>>
        <<- /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.
................................................................................
TEST: {{ma}} {{parti}}
TEST: {{ma}} amour                                            ->> mon
TEST: ma {{carlingues}}
TEST: Après cet épisode, la SA a joué un rôle marginal dans l’histoire du Troisième Reich


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

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

TEST: quelle belle {{étourdi}}, cette gamine
TEST: j’en ai assez de cette ville {{stressées}} en permanence.
TEST: Peut-on imaginer de plus {{beaux}} {{enfant}} ?
TEST: de ma grande {{ami}}
TEST: il fut cette fois ulcéré de voir son entreprise une fois de plus ruinée par la malchance.


__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)") 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.
TEST: que faire de votre {{ennuyeuse}} {{avocat}}
TEST: de quelque cartable {{vides}}
TEST: de notre petit {{amis}}
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)") 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)") 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)") 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]"))
................................................................................
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]"))
        -2>> =suggPlur(\2)                                                                  && Accord de nombre erroné : « \2 » devrait être au pluriel.
        <<- /gn/ __also__ and morph(\2, ">[bcçdfglklmnpqrstvwxz].*:m", ":f") >>>
        <<- /gn/ \1.endswith("x") or \1.endswith("X") -1>> au                               && Accord de nombre erroné : « \2 » est au singulier.
        <<- /gn/ __else__ -1>> ce                                                           && Accord de nombre erroné : « \2 » est au singulier.

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

TEST: plusieurs {{femme}}
TEST: plusieurs {{foi}} par jour.
TEST: plusieurs {{abricot}}




























## 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]"))
................................................................................

TEST: {{maints}} {{petites}}
TEST: Maintes {{danse}}
TEST: Maints {{chien}}
TEST: {{maintes}} {{petits}}
TEST: Un problème rapporté par maints est l’incapacité à trouver un partenaire


## 3m
__gn_det_les_3m__
    les  *WORD  *WORD  *WORD
        <<- /gn/ morph(<1, "<start>|:V", "*") and not morph(\2, ":[123][sp]") and \4.islower() and not morph(\4, ">seul/") >>>
        <<- /gn/ morph(\2, ":[NA].*:m:[pi]", ":[fe]") and morph(\3, ":[NA].*:[me]:[pi]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NAQ].*:f", "*")
        -4>> =suggMasPlur(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au masculin pluriel.
        <<- /gn/ __else__ and morph(\2, ":[NA].*:f:[pi]", ":[me]") and morph(\3, ":[NA].*:[fe]:[pi]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NAQ].*:m", "*")
        -4>> =suggFemPlur(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au féminin pluriel.
        <<- /gn/ __else__ and morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:[me]:[pi]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NAQ].*:s", "*")
        -4>> =suggPlur(\4)                                                                  && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au pluriel.

TEST: les heureux imbéciles {{payée}} au lance-pierre.                      ->> payés
TEST: les petites gens {{oubliés}}                                          ->> oubliées
TEST: les psychologues hypocrites {{ébranlé}} par la crise                  ->> ébranlés


__gn_det_leurs_3m__
    leurs  *WORD  *WORD  *WORD
        <<- /gn/ morph(<1, "<start>|:V", "*") and not morph(\2, ":[123][sp]") and \4.islower() and not morph(\4, ">seul/") and not before("(?i)\\bune? de +$") >>>
        <<- /gn/ morph(\2, ":[NA].*:m:[pi]", ":[fe]") and morph(\3, ":[NA].*:[me]:[pi]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NAQ].*:f", "*")
        -4>> =suggMasPlur(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au masculin pluriel.
        <<- /gn/ __else__ and morph(\2, ":[NA].*:f:[pi]", ":[me]") and morph(\3, ":[NA].*:[fe]:[pi]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NAQ].*:m", "*")
        -4>> =suggFemPlur(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au féminin pluriel.
        <<- /gn/ __else__ and morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:[me]:[pi]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NAQ].*:s", "*")
        -4>> =suggPlur(\4)                                                                  && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au pluriel.

TEST: Leurs grands plans {{dépassées}} par les évènements                   ->> dépassés
TEST: leurs grandes peurs {{refoulés}}                                      ->> refoulées
TEST: leurs psychologues hypocrites {{condamné}}                            ->> condamnés


__gn_det_mas_plur_3m__
    [quels|certains|maints|lesdits|desdits|auxdits]  *WORD  *WORD  *WORD
        <<- /gn/ morph(<1, "<start>|:V", "*") and \4.islower() and not morph(\4, ">seul/") and not before("(?i)\\bune? de +$")
            and morph(\2, ":[NA].*:[me]:[pi]") and morph(\3, ":[NA].*:[me]:[pi]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NAQ].*:[fs]", "*")
        -4>> =suggMasPlur(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au masculin pluriel.

TEST: lesdits dentistes ruinés {{oublié}}                                   ->> oubliés
TEST: Prendre goût aux heures passées seul à marcher


__gn_det_fem_plur_3m__
    [quelles|certaines|maintes|lesdites|desdites|auxdites]  *WORD  *WORD  *WORD
        <<- /gn/ morph(<1, "<start>|:V", "*") and \4.islower() and not morph(\4, ">seul/") and not before("(?i)\\bune? de +$")
            and morph(\2, ":[NA].*:[fe]:[pi]") and morph(\3, ":[NA].*:[fe]:[pi]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NAQ].*:[ms]", "*")
        -4>> =suggFemPlur(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au féminin pluriel.

TEST: quelles belles nuits {{inoubliable}}                                  ->> inoubliables


__gn_det_epi_plur_3m__
    [ces|mes|tes|ses|nos|vos|aux|plusieurs|quelques|moult]  *WORD  *WORD  *WORD
        <<- /gn/ morph(<1, "<start>|:V", "*") and \4.islower() and not morph(\4, ">seul/") and not before("(?i)\\bune? de +$") >>>
        <<- /gn/ morph(\2, ":[NA].*:m:[pi]", ":[fe]") and morph(\3, ":[NA].*:[me]:[pi]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NAQ].*:f", "*")
        -4>> =suggMasPlur(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au masculin pluriel.
        <<- /gn/ __else__ and morph(\2, ":[NA].*:f:[pi]", ":[me]") and morph(\3, ":[NA].*:[fe]:[pi]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NAQ].*:m", "*")
        -4>> =suggFemPlur(\4)                                                               && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au féminin pluriel.
        <<- /gn/ __else__ and morph(\2, ":[NA].*:[pi]") and morph(\3, ":[NA].*:[me]:[pi]", ":(?:[123][sp]|G|P|B)") and morph(\4, ":[NAQ].*:s", "*")
        -4>> =suggPlur(\4)                                                                  && Accord de nombre erroné avec « \1 \2 \3 » : « \4 » devrait être au pluriel.

TEST: ces petites sottes {{venus}} foutre la merde                          ->> venues
TEST: mes beaux chevaux {{oubliées}}                                        ->> oubliés
TEST: vos dentistes ridicules {{perdu}} dans la forêt                       ->> perdus
TEST: Prendre goût aux heures passées seul à marcher


## 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.
................................................................................
TEST: Le sentiment d’humiliation, la colère nous indiquent que…
TEST: la majorité survenaient sous la contrainte
TEST: la plupart avançaient en rangs serrés
TEST: un grand nombre avaient été humiliés par ces pratiques délétères


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

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