Grammalecte  Check-in [074825dfe9]

Overview
Comment:[fr] màj: conjugaisons, suppression des pronoms et de “ne”
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | fr | fr_killtricks
Files: files | file ages | folders
SHA3-256: 074825dfe905ac4da324cc8f840a4488393c5ccff429a5c14ddbc38cb7b6a0ac
User & Date: olr on 2017-06-20 16:36:05
Other Links: branch diff | manifest | tags
Context
2017-06-20
18:41
[fr] màj: conjugaisons, suppression des pronoms et de “ne” (2) check-in: 7c28c4de28 user: olr tags: fr, fr_killtricks
16:36
[fr] màj: conjugaisons, suppression des pronoms et de “ne” check-in: 074825dfe9 user: olr tags: fr, fr_killtricks
12:47
[fr] simplifications du contrôle de l’impératif check-in: 7bf7fe4aae user: olr tags: fr, fr_killtricks
Changes

Modified gc_lang/fr/rules.grx from [1bbb0a442e] to [e821d0d4bf].

3795
3796
3797
3798
3799
3800
3801
3802
3803
3804


3805
3806
3807
3808
3809
3810
3811
....
3813
3814
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
....
3862
3863
3864
3865
3866
3867
3868

3869
3870
3871
3872
3873
3874
3875
....
4602
4603
4604
4605
4606
4607
4608




4609
4610
4611
4612
4613
4614
4615
....
9727
9728
9729
9730
9731
9732
9733

9734



9735


9736



9737



9738





9739



9740


9741



9742
9743
9744
9745


9746



9747



9748




9749



9750



9751



9752


9753




9754



9755



9756



9757

9758



9759



9760




9761


9762




9763



9764





9765



9766
9767



9768



9769



9770



9771


9772
9773
9774
9775
9776
9777
9778
....
9796
9797
9798
9799
9800
9801
9802
9803
9804
9805
9806
9807
9808
9809
9810
9811
....
9882
9883
9884
9885
9886
9887
9888
9889
9890
9891
9892
9893
9894
9895
9896
9897
....
9899
9900
9901
9902
9903
9904
9905
9906
9907
9908
9909
9910
9911
9912
9913
....
9991
9992
9993
9994
9995
9996
9997
9998
9999
10000
10001
10002
10003
10004
10005
.....
10155
10156
10157
10158
10159
10160
10161
10162
10163
10164
10165
10166
10167
10168
10169
.....
10183
10184
10185
10186
10187
10188
10189
10190
10191
10192
10193
10194
10195
10196
10197
.....
10268
10269
10270
10271
10272
10273
10274
10275
10276
10277
10278
10279
10280
10281
10282
10283
10284
10285
10286
10287
10288
10289
10290
10291
10292
10293
10294
10295
10296
10297
10298
10299
10300
10301
10302
10303
10304
10305
10306
.....
10319
10320
10321
10322
10323
10324
10325
10326
10327
10328
10329
10330
10331
10332
10333
10334
10335
10336
10337
10338
10339
10340
10341
10342
.....
10375
10376
10377
10378
10379
10380
10381
10382
10383
10384
10385
10386
10387
10388
10389
10390
10391
10392
10393
10394
10395
10396
10397
10398
10399
10400
10401
10402
10403
10404
10405
10406
10407
.....
10547
10548
10549
10550
10551
10552
10553
10554
10555
10556
10557
10558
10559
10560
10561
.....
10565
10566
10567
10568
10569
10570
10571
10572
10573
10574
10575
10576
10577
10578
10579
.....
10757
10758
10759
10760
10761
10762
10763
10764
10765
10766
10767
10768
10769
10770
10771
.....
10777
10778
10779
10780
10781
10782
10783
10784
10785
10786
10787
10788
10789
10790
10791
10792
10793
10794
10795
10796
10797
10798
10799
10800
10801
10802
10803
10804
10805
10806


10807
10808
10809
10810
10811
10812
10813
10814
10815
10816
10817
10818
10819
10820
10821
10822
10823
10824
10825
10826
10827
10828
10829
10830
10831
10832
10833
10834
10835
10836
10837
10838
10839
10840
10841
10842
10843
10844
10845
10846
.....
10850
10851
10852
10853
10854
10855
10856
10857
10858
10859
10860
10861
10862
10863
10864
10865
10866
10867
10868
10869
10870
10871
10872
10873
10874
.....
10875
10876
10877
10878
10879
10880
10881
10882
10883
10884
10885
10886
10887
10888
10889
TEST: Quelle chance tu as eue de voir ruiné ce connard.
TEST: l’immobilier a été ces dernières années l’investissement le plus rentable (voir graphique ci-dessous)
TEST: elles sont pas mal ainsi, voire élégantes pourrait-on dire.
TEST: il y en a peu, voire très peu.
TEST: car elles pénètrent dans les poumons voire le système sanguin.
TEST: des enfants malades, qui préfèrent souvent voir Dark Vador que des vieux clowns un peu flippants.



#### Pronoms


__[i](p_m_enfin)__      m’enfin <<- ~>> *

__[i]/conf(conf_j_y_en_qqch)__
    (j’(?:en +|y +|))({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|O[onw])")
    -2>> =suggSimil(\2, ":1s")                                                               # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_ne_qqch)__
................................................................................
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|O[onw]|X)|>(?:[lmtsn]|surtout|guère|presque|même|tout|parfois|vraiment|réellement) ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Oo|Y)")                                                      # Incohérence avec « \1 » : « \2 » devrait être un verbe ou un pronom personnel objet.
__[i]/conf(conf_n_y_en_qqch)__
    (n’(?:en|y)) ({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|O[onw]|X)") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Y)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_ne_pronom_qqch)__
    (ne l(?:es? +|a +|’))({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|O[onw]|X)") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Y)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_me_te_se_qqch)__
    ([mts]e +(?:les? |la |l’|))(?!voi(?:là|ci))({w_1})  @@0,$
    <<- not re.search("(?i)^se que?", \0)
    and morphex(\2, ":", ":(?:[123][sp]|Y|P|Oo)|>[lmts] ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Oo|Y)")                                                      # Incohérence avec « \1 » : « \2 » devrait être un verbe ou un pronom personnel objet.
................................................................................
TEST: je t’en {{parlé}}
TEST: M’enfin, c’est absurde
TEST: il est normal de ne presque pas payer des gens qui effectuent un travail
TEST: j’ai l’impression de ne même pas savoir ce qu’est un « juif français ».
TEST: C’que j’comprends, c’est qu’il y a des limites à ce qu’on peut supporter.
TEST: la tentation pour certains médias de ne tout simplement pas rémunérer notre travail si celui-ci n’est finalement pas publié.
TEST: Ne parfois pas être celui qui sabote l’ambiance.


!!
!!
!!!! Formes verbales sans sujet                                                                     
!!
!!

................................................................................
    <<- not morph(\2, ":A", False) ~1>> *
__[i](p_verbe_pronom_être)__
    (d[eouû]\w+|cr[ouû]\w+|pens\w+|imagin\w+|estim\w+) (l(?:eur|ui)|nous|vous) être @@0,w
    <<- morph(\1, ">(?:croire|devoir|estimer|imaginer|penser) ") ~2>> *
__[i](p_en_partie)__
    (en partie) ({w_2}) @@0,$
    <<- morph(\1, ":(?:R|D|[123]s|X)", False) ~1>> *




__[i](p_en_quelques_tps1)__
    (en quelques (?:années|décennies|semaines|heures|minutes)) +({w_2}) @@0,$
    <<- not morph(\2, ":[AQ]:[ef]:[si]", False) ~1>> *
__[i](p_en_quelques_tps2)__
    (en quelques (?:jours|mois|trimestres|semestres|siècles|millénaires)) +({w_2}) @@0,$
    <<- not morph(\2, ":[AQ]:[em]:[si]", False) ~1>> *
__[i](p_entre_pronom_et_pronom)__
................................................................................
!!!
!!!
!!! Processeur: destruction des pronoms qui précèdent un verbe et de l’adverbe de négation “ne”.
!!!
!!!

# Brainfuck (ici, prudence !)

__[i](p_pro_per_obj01)__    ne +(?:l(?:ui|eur|a|es?)|[mts]e|[nv]ous) +(?:l(?:a|es?|ui|eur)|en|y) <<- ~>> >



__[i](p_pro_per_obj02)__    ne +(?:[mts](?:e|’(?:en|y))|[nv]ous|l(?:es?|a|ui|eur|’(?:en|y))) <<- ~>> >


__[i](p_pro_per_obj03)__    [mts]e +l(?:a|es?) <<- ~>> >



__[i](p_pro_per_obj04)__    [nmsl]’(?:en|y) <<- ~>> >



__[i](p_pro_per_obj05)__    l(?:a|es?) +(?:lui|en) <<- ~>> >





__[i](p_pro_per_obj06)__    lui +(?:la|les?|en|y) <<- not morph(word(-1), ":R", False, True) ~>> >



__[i](p_pro_per_obj07)__    leur +(?:en|y) <<- not morph(word(-1), ":R", False, False) ~>> >


__[i](p_pro_per_obj08)__    (?:je|tu|ils?|on) ([nv]ous(?: la| les?|)|lui) @@$ <<- ~1>> >



__[i](p_pro_per_obj09)__    (?:je|tu|ils?|on) (l(?:es?|a)) ({w_1}) @@w,$
    <<- \1 == "le" and not morph(\2, ":N.*:[me]:[si]") ~1>> >
    <<- \1 == "la" and not morph(\2, ":N.*:[fe]:[si]") ~1>> >
    <<- \1 == "les" and not morph(\2, ":N.*:.:[pi]") ~1>> >


__[i](p_pro_per_obj10)__    (?:elles?|[nv]ous) ([nv]ous(?: la| les?|)|l(?:es?|ui|a)) @@$ <<- not morph(word(-1), ":R", False, False) ~1>> >



__[i](p_pro_per_obj11)__    ce(?:ux|lles?|lui|la|) qui ([nv]ous(?: la| les?|)|l(?:es?|ui|a)) @@$ <<- ~1>> >



__[i](p_pro_per_obj12)__    (?<!’)(en) ({w_2}) @@0,$ <<- morph(\2, ":[123][sp]") ~1>> >




__[i](p_pro_per_obj13)__    (?:tu|il|on) (en) @@3 <<- not morph(word(-1), ":[123]s", False, False) ~1>> >



__[i](p_pro_per_obj14)__    (?<!’)elle (en) @@5 <<- not morph(word(-1), ":(?:[123]s|R)", False, False) ~1>> >



__[i](p_pro_per_obj15)__    (?<!’)elles (en) @@6 <<- not morph(word(-1), ":(?:[123]p|R)", False, False) ~1>> >



__[i](p_pro_per_obj16)__    ils (en) @@4 <<- not morph(word(-1), ":3p", False, False) ~1>> >


__[i](p_pro_per_obj17)__    (?<!’)(y) ({w_2}) @@0,2 <<- morph(\2, ":[123][sp]", False) ~1>> >




__[i](p_pro_per_obj18)__    (le) ({w_2}) @@0,3 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[me]:[si]|G|M)") ~1>> >



__[i](p_pro_per_obj19)__    (la) ({w_2}) @@0,3 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[fe]:[si]|G|M)") ~1>> >



__[i](p_pro_per_obj20)__    (l’)({w_2}) @@0,2 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> >



__[i](p_pro_per_obj21)__    (leur) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> >

__[s](p_pro_per_obj22)__    [lL]’a <<- ~>> > a



__[i](p_pro_per_obj23)__    (nous) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:A|G|M|1p)") ~1>> >



__[i](p_pro_per_obj24)__    (vous) ({w_2}) @@0,5 <<- morphex(\2, ":(?:[123][sp]|Y)", ":(?:A|G|M|2p)") ~1>> >




__[i](p_pro_per_obj25)__    (?:à|de) ([nv]ous|lui|les?|en)(?! qui) @@$ <<- ~1>> >


__[i](p_pro_per_obj26)__    (s’)({w4}) @@0,2 <<- morph(\2, ":V", False) ~1>> >




__[i](p_pro_per_obj27)__    (?:je|tu|ils?|elles?|on) (l’|l(?:es?|a|ui|eur) +|[nv]ous +){w_2} @@* <<- isStart() ~1>> >



__[i](p_pro_per_obj28)__    (?:je|tu|ils?|elles?|on|[nv]ous|ce(?:ux|elles?|lui|la|) qui) (l’)({w4}) @@*,$ <<- morph(\2, ":V", False) ~1>> >





__[i](p_pro_per_obj29)__    (t’(?:en|y)) ({w_2}) @@0,$ <<- not morph(\2, ":2s", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> >



__[i](p_pro_per_obj30)__    (t’)({w_2}) @@0,$ <<- not morph(\2, ":2s|>(ils?|elles?|on) ", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> >
__[i>(p_pro_per_obj31)__    ne [mtsl]’ <<- ~>> >



__[i>(p_pro_per_obj32)__    [mts]e +l’ <<- ~>> >



__[i>(p_pro_per_obj33)__    [nm]’ <<- ~>> >



__[i](p_pro_per_obj34)__    [nmts]e <<- ~>> >



__<s>(p_pro_per_obj35)__    > +> <<- ~>> >


# Fin du Brainfuck



!!
!!
!!!! Confusions                                                                                     
................................................................................
TEST: Il vient {{a}} la maison.
TEST: tu ne donnes rien {{a}} ces hommes.
TEST: Nous les donnons {{a}} ces gens.
TEST: j’arrive {{a}} la gare


#### CONFUSION fasse / face
__<i]/conf(conf_fasse)__
    > +(face)(?! à) @@$ <<- -1>> fasse                     # Confusion probable. Pour le subjonctif de “faire”, écrivez “fasse”.

TEST: j’ai peur qu’il ne leur {{face}} quelque chose de mal


#### CONFUSION ÊTRE / AVOIR
__[i]/conf(conf_ait_confiance_été_faim_tort)__
    (?<!’)(est?) +(con(?:fiance|science)|envie|été|p(?:eine|eur)|faim|h(?:âte|onte)|recours|soif|tort)  @@0,$
................................................................................
    <<- morph(\1, ">valoir ", False) and morphex(\2, ":(?:Q|2p)", ":[GM]")
    -2>> =suggVerbInfi(@)                                                                           # Le verbe devrait être à l’infinitif.

TEST: Mieux vaut {{consacré}} son temps à des occupations utiles.


__[i]/infi(infi_à)__
    à +> +({w_2}(?:ée?|ez))  @@$
    <<- morphex(\1, ":V1", ":[NM]") and not \1.istitle() and not before("> +$")
    -1>> =suggVerbInfi(@)                                                                           # Le verbe devrait être à l’infinitif.

TEST: elle parvenait à y {{songez}} souvent
TEST: je vais à Rodez.


__[i]/infi(infi_avoir_beau)__
................................................................................
    <<- morph(\1, ">avoir ", False) and morphex(\2, ":V1", ":N")
    -2>> =suggVerbInfi(@)                                                                           # Le verbe devrait être à l’infinitif.|http://fr.wiktionary.org/wiki/avoir_beau

TEST: Ils ont beau {{consacré}} le plus clair de leur temps à ce projet, ça n’avance guère.


__[i]/infi(infi_par_pour_sans)__
    (?:p(?:a|ou)r|sans) +> +({w_2}(?:ée?s?|ai[st]?|ez))  @@$
    <<- morphex(\1, ":[Q123][sp]?", ":Y") -1>> =suggVerbInfi(@)                                     # Le verbe devrait être à l’infinitif.

TEST: pour s’y {{donnait}} le plus souvent.



#__[i]/infi__
................................................................................
TEST: Tu ne le lui {{prend}} pas.
TEST: Tu ne m’{{attendra}} pas.
TEST: toi qui n’y {{connait}} rien, ne nous ennuie pas avec tes théories.


## 3sg
__[i]/conj(conj_il)__
    (il) +({w_1})  @@0,$
    <<- morphex(\2, ":V", ":(?:3s|P|G)") and not (morph(\2, ":[PQ]", False) and morph(word(-1), ":V0.*:3s", False, False))
    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
    <<- __also__ and morph(\2, ":3p", False) -1>> ils        # Accord avec « \2 ».
__[i]/conj(conj_il_pronom)__
    (il) +> +({w_1})  @@0,$
    <<- morphex(\2, ":V", ":(?:3s|P|G)")
    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
................................................................................
    <<- -1>> =\1[:-1]+"t"                                    # Conjugaison erronée. Accord avec “mieux” : utilisez la 3ᵉ personne du singulier.

TEST: avec toi qui ne sais rien de rien, mieux {{vaux}} ne rien dire.
TEST: Mais là-bas mieux {{valais}} ouvrir sa gueule que se taire.


__[i]/conj(conj_personne_aucun_rien_nul)__
    (personne|aucun|rien|nul(?:le|)) +(?:qui +|)> +({w_1})  @@0,$
    <<- morphex(\2, ":V", ":(?:3s|P|G)") and morphex(word(-1), ":C", ":(?:Y|P|Q|[123][sp]|R)", True)
    and not( \1.endswith("ien") and before("> +$") and morph(\2, ":Y", False) )
    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1… ». Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: Personne ne {{peux}} me le dire.
TEST: Rien ne {{sers}} de courir
TEST: Rien n’{{arrives}} sans raison
................................................................................
    -2>> =suggVerb(@, ":3s")                                # Conjugaison erronée. Accord avec « \1… ». Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: un des ingénieurs {{vinrent}} nous dire quoi faire.
TEST: une des femmes présente ses résultats.


__[i]/conj(conj_un_une_des_pronom)__
    (une? des {w_2}) +(?:qui +>? *|> +)({w_1})  @@0,$
    <<- morphex(\2, ":V", ":(?:3s|P|G)") and morphex(word(-1), ":C", ":(?:Y|P|Q|[123][sp]|R)", True)
    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1… ». Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: un des membres présents au conseil {{demandent}} un vote à bulletin secret
TEST: une des femmes de ce conseil ne {{céderaient}} jamais au chantage.
TEST: l’un des chants les plus diffusés pendant la Révolution culturelle

................................................................................
TEST: un paquet de gens futés n’y ont vu que du feu.
TEST: La moitié d’entre elles voient leurs loyers diminuer depuis le début de l’année
TEST: Une partie de ces propositions étaient naïves


## 1pl
__[i]/conj(conj_nous_pronom)__
    ^ *nous +> +({w1})  @@$
    <<- morphex(\1, ":V", ":(?:1p|3[sp])") and not after("^ +(?:je|tu|ils?|elles?|on|[vn]ous)")
    -1>> =suggVerb(@, ":1p")                                 # Conjugaison erronée. Accord avec « nous ». Le verbe devrait être à la 1ʳᵉ personne du pluriel.
__[i]/conj(conj_nous_qui)__
    ^ *nous +qui +>? *({w1})  @@$
    <<- morphex(\1, ":V", ":[13]p") and not after("^ +(?:je|tu|il|elle|on|[vn]ous)")
    -1>> =suggVerb(@, ":1p")                                 # Conjugaison erronée. Accord avec « nous ». Le verbe devrait être à la 1ʳᵉ personne du pluriel.
__[i]/conj(conj_nous)__
    ^ *nous +(?:qui +(?:> +|)|> +)(\w+ont)  @@$
    <<- morphex(\1, ":V", ":1p") and not after("^ +(?:ils|elles)")
    -1>> =suggVerb(@, ":1p")                                 # Conjugaison erronée. Accord avec « nous ». Le verbe devrait être à la 1ʳᵉ personne du pluriel.

TEST: nous {{donné}} trop de considération
TEST: nous vous {{donnerez}} trop de considération
TEST: nous qui {{somme}} si savants
TEST: nous qui {{mourront}} pour toi.


## 2pl
__[i]/conj(conj_vous_pronom)__
    ^ *vous +> +({w1})  @@$
    <<- morphex(\1, ":V", ":(?:2p|3[sp])") and not after("^ +(?:je|ils?|elles?|on|[vn]ous)")
    -1>> =suggVerb(@, ":2p")                                 # Conjugaison erronée. Accord avec « vous ». Le verbe devrait être à la 2ᵉ personne du pluriel.
__[i]/conj(conj_vous_qui)__
    ^ *vous +qui +>? *({w1})  @@$
    <<- morphex(\1, ":V", ":2p") and not after("^ +(?:je|ils?|elles?|on|[vn]ous)")
    -1>> =suggVerb(@, ":2p")                                 # Conjugaison erronée. Accord avec « vous ». Le verbe devrait être à la 2ᵉ personne du pluriel.

TEST: vous {{donné}} du bonheur
TEST: vous lui {{donner}} du temps
TEST: vous qui {{avançait}} dans la nuit comme des ombres furtives

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

TEST: {{Ils}} {{vienne}} souvent.
TEST: Ils ne m’{{attends}} pas.
TEST: {{Ils}} vous le {{donne}}.


__[i]/conj(conj_ceux_celles_qui)__
    (ce(?:ux|lles) +qui) +>? *({w_1})  @@0,$
    <<- morphex(\2, ":V", ":(?:3p|P|Q|G)")
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: Ceux qui {{chante}} toute la journée…
TEST: Celles qui {{pense}}.


__[i]/conj(conj_ceux_là_celles_ci_lesquels)__
    (ce(?:ux-(?:ci|là)|lles-(?:ci|là))|lesquel(?:le|)s)(?: +qui|) +>? *({w_1})  @@0,$
    <<- morphex(\2, ":V", ":(?:3p|P|Q|G)") and not morph(word(-1), ":[VR]", False, False)
    and not (morph(\2, ":Y", False) and re.search(r"(?i)lesquel", \1) and not re.search(" qui |>", \0))
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: lesquels {{devienne}} des ennuyeux incomparables.
TEST: Mais parmi les millions de causes à défendre, lesquelles choisir ?

................................................................................
TEST: j’ai, tu as, ils ont, elles {{on}}
TEST: Or parmi celles-ci on trouve typiquement d’un côté les structures


# L’accord par syllepse est obligatoire après /la plupart/, ainsi qu’après /nombre/ et /quantité/ employés sans déterminant. L’accord se fait avec le « pseudo-complément ».

__[i]/conj(conj_beaucoup_d_aucuns_la_plupart)__
    (beaucoup|d’aucuns|la plupart) +>? *({w_2})  @@0,$
    <<- morphex(\2, ":V", ":(?:3p|P|Q|G)") and not morph(word(-1), ":[VR]|>de ", False, False)
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.

__[i]/conj(conj_beaucoup_d_aucuns_la_plupart_qui)__
    (beaucoup|d’aucuns|la plupart) +qui +>? *({w_2})  @@0,$
    <<- morphex(\2, ":V", ":(?:3p|P|Q|G)") and not morph(word(-1), ":[VR]", False, False)
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: la plupart des hommes {{vienne}}
TEST: La plupart {{admet}}
TEST: beaucoup {{vienne}}
TEST: d’aucuns {{pense}} que c’est faux
TEST: beaucoup qui ne {{pense}} jamais à rien, mais qui ont quand même des avis sur tout.
TEST: beaucoup entre la peste et le choléra.


__[i]/conj(conj_certains_tous_plusieurs)__
    (?<!de )(certaine?s|tou(?:te|)s|plusieurs)(?: +qui|) +>? *({w_2})  @@0,$
    <<- morphex(\2, ":V", ":(?:G|N|A|3p|P|Q)") and not morph(word(-1), ":[VR]", False, False)
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: certains {{prenne}} leur temps
TEST: Plusieurs qui {{pense}} que c’est une arnaque se sont quand même trompés.


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



#### NOMS PROPRES

# 3sg
__[s]/conj(conj_nom_propre)__
    ([A-ZÉÈ][\w-]+) +>? *({w_1})  @@0,$
    <<- not before(r"\b(?:et |ou |[dD][eu] |ni |[dD]e l’) *$") and morph(\1, ":M", False) and morphex(\2, ":[123][sp]", ":(?:G|3s|3p!|P|M|[AQ].*:[si])")
    and not morph(word(-1), ":[VRD]", False, False) and not before(r"([A-ZÉÈ][\w-]+), +([A-ZÉÈ][\w-]+), +$")
    and not (morph(\2, ":3p", False) and word(-1))
    -2>> =suggVerb(@, ":3s")
    # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: Marc {{arrives}} demain.
................................................................................
TEST: Les fondateurs pionniers de l’Internet n’avaient pas prévu
TEST: les compteurs Geiger ne détectent pas le polonium
TEST: Des femmes de l’administration Obama y racontent qu’elles ont constaté qu’il leur arrivait régulièrement de ne pas être invitées


# 3pl
__[s]/conj(conj_nom_propre_et_nom_propre)__
    (?<!et |ou |[dD][eu] |ni )([A-ZÉÈ][\w-]+) et ([A-ZÉÈ][\w-]+) +>? *({w_1})  @@0,w,$
    <<- morph(\1, ":M", False) and morph(\2, ":M", False)
    and morphex(\3, ":[123][sp]", ":(?:G|3p|P|Q.*:[pi])") and not morph(word(-1), ":R", False, False)
    -3>> =suggVerb(@, ":3p")
    # Conjugaison erronée. Accord avec « \1 et \2 ». Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: Samantha et Eva {{viennes}} demain.
TEST: Samantha et Eva leur {{décrive}} une leçon.
................................................................................

#### VERBE AUXILIAIRE

__[i]/conf(conf_avoir_sujet_participe_passé)__
    ({avoir})-(?:je|tu|ils?|elles?|on) +({ppas})  @@0,$
    <<- morph(\1, ">avoir ", False) and morph(\2, ":V.......e_.*:Q", False) -1>> _  # Incohérence. La forme verbale “\2” ne peut pas être utilisé avec l’auxiliaire “avoir”, seulement avec l’auxiliaire “être”.
__[i]/conf(conf_sujet_avoir_participe_passé)__
    (?:j’|je |tu |ils? |elles? |on ) *>? *({avoir}) +({ppas})  @@*,$
    <<- morph(\1, ">avoir ", False) and morph(\2, ":V.......e_.*:Q", False) -1>> _  # Incohérence. La forme verbale “\2” ne peut pas être utilisé avec l’auxiliaire “avoir”, seulement avec l’auxiliaire “être”.

TEST: {{Ait}}-il arrivé à ses fins ?
TEST: je n’{{avais}} pas parti avec eux.
TEST: Avais-je partie liée avec lui ?
TEST: il {{avait}} parti.

................................................................................
!!
!!

# conditionnel / futur

__[i]/vmode(vmode_j_aimerais_vinfi)__
    j(?:e +|’)(aimerai|préf[éè]rerai|apprécierai|voudrai|souhaiterai) +({w_1})  @@w,$
    <<- morphex(\2, ":[YX]|>y ", "R") -1>> \1s                                  # Si vous exprimez un souhait, utilisez le conditionnel et non le futur.
__[i>/vmode(vmode_j_aimerais_pronom)__
    j(?:e +|’)(aimerai|préf[éè]rerai|apprécierai|voudrai|souhaiterai) +(?:que? |>)  @@w
    <<- -1>> \1s                                                                # Si vous exprimez un souhait, utilisez le conditionnel et non le futur.

TEST: J’{{aimerai}} savoir ce dont il retourne.
TEST: dans tous les cas j’{{aimerai}} ne rien savoir
TEST: Je {{voudrai}} qu’il soit déjà là.
TEST: J’aimerai ces cours-là autant que les autres.
TEST: J’aimerai la danse et la musique, puisque vous l’exigez.


__[i>/vmode(vmode_j_aurais_aimé_que_avoir_être1)__
    j’(aurai) +(?:aimé|souhaité|préféré|voulu) +(?:que? |ne |> )  @@2
    <<- -1>> aurais|eusse                           # Pour un souhait passé, utilisez le conditionnel passé et non le futur antérieur. Exemple pour le futur antérieur : « quand j’aurai fini… »
__[i]/vmode(vmode_j_aurais_aimé_que_avoir_être2)__
    j’(aurai) +(?:aimé|souhaité|préféré|voulu) +(?:[nmtsl]’|)({infi})  @@2,$
    <<- morph(\2, ":Y", False)
    -1>> aurais|eusse                               # Pour un souhait passé, utilisez le conditionnel passé et non le futur antérieur. Exemple pour le futur antérieur : « quand j’aurai fini… »

TEST: J’{{aurai}} aimé nous offrir ce magnifique cadeau.
TEST: j’{{aurai}} voulu être un artiste.
TEST: j’{{aurai}} préféré ne pas avoir à l’entendre.


TEST: Quand j’en aurai fini avec eux, vous aurez du mal à les reconnaître.
TEST: Quand j’aurai fini ce boulot, je ne sais pas ce que je ferai.
TEST: Quand j’aurai soif et faim, je m’arrêterai.


# Si suivi du conditionnel ou du subjonctif
__[i]/vmode(vmode_si_sujet1)__
    si +({w1}) +>? *({w_2})  @@w,$
    <<- morph(\1, ":(?:Os|M)", False) and morphex(\2, ":[SK]", ":(?:G|V0|I)") and isStart()
    -2>> _                                                                          # Ce verbe ne devrait être ni au conditionnel, ni au subjonctif.
__[i]/vmode(vmode_si_sujet2)__
    (?:si [jt]’|s’ils? )>? *({w_2})  @@$
    <<- morphex(\1, ":[SK]", ":(?:G|V0|I)") and isStart()
    -1>> _                                                                          # Ce verbe ne devrait être ni au conditionnel, ni au subjonctif.

TEST: Si Pierre {{avancerait}} sa voiture de quelques mètres, ça nous permettrait de passer.
TEST: s’ils ne {{mangeraient}} pas tous les jours, ils seraient moins gros.


# Dès que + indicatif
__[i]/vmode(vmode_dès_que)__
    dès +que? +({w1}) +>? *({w_2})  @@w,$
    <<- morph(\1, ":(?:Os|M)", False) and morphex(\2, ":S", ":[IG]")    -2>> =suggVerbMode(@, ":I", \1)     # Ce verbe ne devrait pas être au subjonctif.
#    <<- morph(\1, ":(?:Os|M)", False) and morph(\2, ":K", False)        -2>> =suggVerbMode(@, ":If", \1)    # Ce verbe ne devrait pas être au conditionnel.

#TEST: dès que je le {{verrais}}
TEST: dès qu’il le {{voie}}
TEST: donnant à entendre qu’il avait l’intention de violer Laura dès qu’il en aurait l’occasion


# verbe que + subjonctif
__[i]/vmode(vmode_qqch_que_subjonctif1)__
    (afin|pour|quoi|(?:perm|fa|v[oe]|ordonn|exig|désir|dout|suff|préf[éè]r)\w+) +que? +({w1}) +>? *({w_2})  @@0,w,$
    <<- morph(\1, ">(?:afin|pour|quoi|permettre|falloir|vouloir|ordonner|exiger|désirer|douter|préférer|suffire) ", False)
    and morph(\2, ":(?:Os|M)", False) and morphex(\3, ":I", ":[GYS]")
    and not (morph(\1, ">douter ", False) and morph(\3, ":(?:If|K)", False))
    -3>> =suggVerbMode(@, ":S", \2)                                                 # Ce verbe devrait être au subjonctif.

TEST: Il suffit qu’il {{court}} plus
TEST: Je veux qu’il {{finit}} son repas.
................................................................................
TEST: Je ne doute pas qu’ils réussiront leur mission.
TEST: Je me doutais bien qu’Apple pourrait marcher
TEST: il ne fait aucun doute qu’Amazon le sait.
TEST: quoi que nous autres hommes ayons pu faire


__[i]/vmode(vmode_qqch_que_subjonctif2)__
    (?:à condition|pour peu|il >  peut) +que? +({w1}) +>? *({w_2})  @@w,$
    <<- morph(\1, ":(?:Os|M)", False) and morphex(\2, ":", ":[GYS]") -2>> =suggVerbMode(@, ":S", \1)    # Ce verbe devrait être au subjonctif.

TEST: à condition qu’il {{finit}} son boulot.
TEST: pour peu qu’il {{prend}} son devoir sérieux… 
TEST: il se peut que nous {{avons}} tort.


# indicatif nécessaire
__[i]/vmode(vmode_sujet_indicatif)__
    ^ *(je|j’(?:en|y)|tu|ils?|elles?|on|nous|vous) +>? *({w_2})  @@*,$
    <<- morphex(\2, ":S", ":[GIK]") and not re.search("^e(?:usse|û[mt]es|ût)", \2) 
    -2>> =suggVerbMode(@, ":I", \1)                                                                 # Ce verbe ne devrait pas être au subjonctif.
__[i]/vmode(vmode_j_indicatif)__
    ^ *j’({w_2})  @@$
    <<- morphex(\1, ":S", ":[GIK]") and \1 != "eusse" -1>> =suggVerbMode(@, ":I", "je")             # Ce verbe ne devrait pas être au subjonctif.

TEST: Il {{ait}} parti.
................................................................................
TEST: Il en {{conclue}} qu’il a eu raison.
TEST: j’en {{aie}} marre
TEST: j’{{aie}} faim


# Après que + indicatif
__[i]/vmode(vmode_après_que_indicatif)__
    après que? ({w_2}) +>? *({w_2})  @@w,$
    <<- morph(\1, ":(?:Os|M)", False) and (morph(\2, ":V.*:S") or morph(\2, ":V0e.*:S", False))
    -2>> =suggVerbMode(@, ":I", \1)
    # Après « après que », le verbe s’emploie pas au subjonctif mais à l’indicatif, si l’action s’est déroulée de façon certaine.

TEST: Après qu’il {{ait}} allé
TEST: Après que Paul {{ait}} mangé son repas.
TEST: Après qu’il {{soit}} parti, il plut.







|
|
|
>
>







 







|







 







>







 







>
>
>
>







 







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







 







|
|







 







|
|







 







|







 







|







 







|







 







|







 







|



|



|











|



|







 







|








|







 







|




|












|







 







|







 







|







 







|







 







|
<
<
<








<
<
<
|
|
|





>
>







|



|









|










|







 







|









|







 







|







3795
3796
3797
3798
3799
3800
3801
3802
3803
3804
3805
3806
3807
3808
3809
3810
3811
3812
3813
....
3815
3816
3817
3818
3819
3820
3821
3822
3823
3824
3825
3826
3827
3828
3829
....
3864
3865
3866
3867
3868
3869
3870
3871
3872
3873
3874
3875
3876
3877
3878
....
4605
4606
4607
4608
4609
4610
4611
4612
4613
4614
4615
4616
4617
4618
4619
4620
4621
4622
....
9734
9735
9736
9737
9738
9739
9740
9741
9742
9743
9744
9745
9746
9747
9748
9749
9750
9751
9752
9753
9754
9755
9756
9757
9758
9759
9760
9761
9762
9763
9764
9765
9766
9767
9768
9769
9770
9771
9772
9773
9774
9775
9776
9777
9778
9779
9780
9781
9782
9783
9784
9785
9786
9787
9788
9789
9790
9791
9792
9793
9794
9795
9796
9797
9798
9799
9800
9801
9802
9803
9804
9805
9806
9807
9808
9809
9810
9811
9812
9813
9814
9815
9816
9817
9818
9819
9820
9821
9822
9823
9824
9825
9826
9827
9828
9829
9830
9831
9832
9833
9834
9835
9836
9837
9838
9839
9840
9841
9842
9843
9844
9845
9846
9847
9848
9849
9850
9851
9852
9853
9854
9855
9856
9857
9858
9859
9860
9861
9862
9863
9864
9865
9866
9867
9868
9869
9870
9871
9872
9873
9874
9875
9876
9877
9878
9879
9880
9881
9882
9883
9884
9885
9886
9887
9888
....
9906
9907
9908
9909
9910
9911
9912
9913
9914
9915
9916
9917
9918
9919
9920
9921
....
9992
9993
9994
9995
9996
9997
9998
9999
10000
10001
10002
10003
10004
10005
10006
10007
.....
10009
10010
10011
10012
10013
10014
10015
10016
10017
10018
10019
10020
10021
10022
10023
.....
10101
10102
10103
10104
10105
10106
10107
10108
10109
10110
10111
10112
10113
10114
10115
.....
10265
10266
10267
10268
10269
10270
10271
10272
10273
10274
10275
10276
10277
10278
10279
.....
10293
10294
10295
10296
10297
10298
10299
10300
10301
10302
10303
10304
10305
10306
10307
.....
10378
10379
10380
10381
10382
10383
10384
10385
10386
10387
10388
10389
10390
10391
10392
10393
10394
10395
10396
10397
10398
10399
10400
10401
10402
10403
10404
10405
10406
10407
10408
10409
10410
10411
10412
10413
10414
10415
10416
.....
10429
10430
10431
10432
10433
10434
10435
10436
10437
10438
10439
10440
10441
10442
10443
10444
10445
10446
10447
10448
10449
10450
10451
10452
.....
10485
10486
10487
10488
10489
10490
10491
10492
10493
10494
10495
10496
10497
10498
10499
10500
10501
10502
10503
10504
10505
10506
10507
10508
10509
10510
10511
10512
10513
10514
10515
10516
10517
.....
10657
10658
10659
10660
10661
10662
10663
10664
10665
10666
10667
10668
10669
10670
10671
.....
10675
10676
10677
10678
10679
10680
10681
10682
10683
10684
10685
10686
10687
10688
10689
.....
10867
10868
10869
10870
10871
10872
10873
10874
10875
10876
10877
10878
10879
10880
10881
.....
10887
10888
10889
10890
10891
10892
10893
10894



10895
10896
10897
10898
10899
10900
10901
10902



10903
10904
10905
10906
10907
10908
10909
10910
10911
10912
10913
10914
10915
10916
10917
10918
10919
10920
10921
10922
10923
10924
10925
10926
10927
10928
10929
10930
10931
10932
10933
10934
10935
10936
10937
10938
10939
10940
10941
10942
10943
10944
10945
10946
10947
10948
10949
10950
10951
10952
.....
10956
10957
10958
10959
10960
10961
10962
10963
10964
10965
10966
10967
10968
10969
10970
10971
10972
10973
10974
10975
10976
10977
10978
10979
10980
.....
10981
10982
10983
10984
10985
10986
10987
10988
10989
10990
10991
10992
10993
10994
10995
TEST: Quelle chance tu as eue de voir ruiné ce connard.
TEST: l’immobilier a été ces dernières années l’investissement le plus rentable (voir graphique ci-dessous)
TEST: elles sont pas mal ainsi, voire élégantes pourrait-on dire.
TEST: il y en a peu, voire très peu.
TEST: car elles pénètrent dans les poumons voire le système sanguin.
TEST: des enfants malades, qui préfèrent souvent voir Dark Vador que des vieux clowns un peu flippants.

!!
!!
!!!! Pronoms + incohérences                                                                         
!!
!!
__[i](p_m_enfin)__      m’enfin <<- ~>> *

__[i]/conf(conf_j_y_en_qqch)__
    (j’(?:en +|y +|))({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|O[onw])")
    -2>> =suggSimil(\2, ":1s")                                                                      # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_ne_qqch)__
................................................................................
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|O[onw]|X)|>(?:[lmtsn]|surtout|guère|presque|même|tout|parfois|vraiment|réellement) ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Oo|Y)")                                                      # Incohérence avec « \1 » : « \2 » devrait être un verbe ou un pronom personnel objet.
__[i]/conf(conf_n_y_en_qqch)__
    (n’(?:en|y)) ({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|O[onw]|X)") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Y)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_ne_pronom_qqch)__
    (ne (?:l(?:es? +|eur +|a +|’)|[nv]ous))({w_1})  @@0,$
    <<- morphex(\2, ":", ":(?:[123][sp]|Y|P|O[onw]|X)") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Y)")                                                         # Incohérence avec « \1 » : « \2 » devrait être un verbe.
__[i]/conf(conf_me_te_se_qqch)__
    ([mts]e +(?:les? |la |l’|))(?!voi(?:là|ci))({w_1})  @@0,$
    <<- not re.search("(?i)^se que?", \0)
    and morphex(\2, ":", ":(?:[123][sp]|Y|P|Oo)|>[lmts] ") and not re.search("(?i)-(?:ils?|elles?|[nv]ous|je|tu|on|ce)$", \2)
    -2>> =suggSimil(\2, ":(?:[123][sp]|Oo|Y)")                                                      # Incohérence avec « \1 » : « \2 » devrait être un verbe ou un pronom personnel objet.
................................................................................
TEST: je t’en {{parlé}}
TEST: M’enfin, c’est absurde
TEST: il est normal de ne presque pas payer des gens qui effectuent un travail
TEST: j’ai l’impression de ne même pas savoir ce qu’est un « juif français ».
TEST: C’que j’comprends, c’est qu’il y a des limites à ce qu’on peut supporter.
TEST: la tentation pour certains médias de ne tout simplement pas rémunérer notre travail si celui-ci n’est finalement pas publié.
TEST: Ne parfois pas être celui qui sabote l’ambiance.


!!
!!
!!!! Formes verbales sans sujet                                                                     
!!
!!

................................................................................
    <<- not morph(\2, ":A", False) ~1>> *
__[i](p_verbe_pronom_être)__
    (d[eouû]\w+|cr[ouû]\w+|pens\w+|imagin\w+|estim\w+) (l(?:eur|ui)|nous|vous) être @@0,w
    <<- morph(\1, ">(?:croire|devoir|estimer|imaginer|penser) ") ~2>> *
__[i](p_en_partie)__
    (en partie) ({w_2}) @@0,$
    <<- morph(\1, ":(?:R|D|[123]s|X)", False) ~1>> *
__[i](p_en_plus)__
    en plus
    <<- morph(word(1), ":A", False, True) ~>> en
    <<- __else__ ~>> *
__[i](p_en_quelques_tps1)__
    (en quelques (?:années|décennies|semaines|heures|minutes)) +({w_2}) @@0,$
    <<- not morph(\2, ":[AQ]:[ef]:[si]", False) ~1>> *
__[i](p_en_quelques_tps2)__
    (en quelques (?:jours|mois|trimestres|semestres|siècles|millénaires)) +({w_2}) @@0,$
    <<- not morph(\2, ":[AQ]:[em]:[si]", False) ~1>> *
__[i](p_entre_pronom_et_pronom)__
................................................................................
!!!
!!!
!!! Processeur: destruction des pronoms qui précèdent un verbe et de l’adverbe de négation “ne”.    
!!!
!!!

# Brainfuck (ici, prudence !)
__[i](p_pro_per_obj01)__
    (ne +(?:l(?:ui|eur|a|es?)|[mts]e|[nv]ous) +(?:l(?:a|es?|ui|eur)|en|y)) +({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
__[i](p_pro_per_obj02)__
    (ne +(?:[mts](?:e|’(?:en|y))|[nv]ous|l(?:es?|a|ui|eur|’(?:en|y)))) +({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
__[i](p_pro_per_obj03)__
    ([mts]e +l(?:a|es?)) +({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
__[i](p_pro_per_obj04)__
    ([nmsl]’(?:en|y)) +({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
__[i](p_pro_per_obj05)__
    (l(?:a|es?) +(?:lui|en)) +({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
__[i](p_pro_per_obj06)__
    (lui +(?:la|les?|en|y)) +({w_1})  @@0,$
    <<- not morph(word(-1), ":R", False, True) ~1>> *
    <<- __also__ and morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj07)__
    (leur +(?:en|y)) +({w_1})  @@0,$
    <<- not morph(word(-1), ":R", False, False) ~1>> *
    <<- __also__ and morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj08)__
    (?:je|tu|ils?|on) ([nv]ous(?: la| les?|)|lui) +({w_1})  @@*,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- __also__ ~1>> *
__[i](p_pro_per_obj09)__
    (?:je|tu|ils?|on) (l(?:es?|a)) ({w_1}) @@w,$
    <<- (\1 == "le" and not morph(\2, ":N.*:[me]:[si]"))
        or (\1 == "la" and not morph(\2, ":N.*:[fe]:[si]"))
        or (\1 == "les" and not morph(\2, ":N.*:.:[pi]")) ~1>> *
    <<- __also__ and morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj10)__
    (?:elles?|[nv]ous) ([nv]ous(?: la| les?|)|l(?:es?|ui|a)) +({w_1})  @@*,$
    <<- not morph(word(-1), ":R", False, False) ~1>> *
    <<- __also__ and morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj11)__
    ce(?:ux|lles?|lui|la|) qui ([nv]ous(?: la| les?|)|l(?:es?|ui|a)) +({w_1})  @@*,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- __also__ ~1>> *
__[i](p_pro_per_obj12)__
    (?<!’)(en) ({w_2}) @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- __also__ ~1>> *
__[i](p_pro_per_obj13)__
    (?:tu|il|on) (en) +({w_1})  @@w,$
    <<- not morph(word(-1), ":[123]s", False, False) ~1>> *
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj14)__
    (?<!’)elle (en) +({w_1})  @@w,$
    <<- not morph(word(-1), ":(?:[123]s|R)", False, False) ~1>> *
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj15)__
    (?<!’)elles (en) +({w_1})  @@w,$
    <<- not morph(word(-1), ":(?:[123]p|R)", False, False) ~1>> *
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj16)__
    ils (en) +({w_1})  @@4,$
    <<- not morph(word(-1), ":3p", False, False) ~1>> *
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj17)__
    (?<!’)(y) ({w_2}) @@0,2
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) ~1>> *
    <<- __also__ =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj18)__
    (le) ({w_2}) @@0,3
    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:[NAQ].*:[me]:[si]|G|M)") ~1>> *
    <<- __also__ =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj19)__
    (la) ({w_2}) @@0,3
    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:[NAQ].*:[fe]:[si]|G|M)") ~1>> *
    <<- __also__ =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj20)__
    (l’)({w_2}) @@0,2
    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> *
    <<- __also__ =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj21)__
    (leur) ({w_2}) @@0,5
    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> *
    <<- __also__ =>> select(\2, ":(?:[123][sp]|P|Y)")
__[s](p_pro_per_obj22)__
    [lL]’(a) @@$
    <<- =>> select(\1, ":V")
    <<- ~>> "  a"
__[i](p_pro_per_obj23)__
    (nous) ({w_2}) @@0,5
    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:A|G|M|1p)") =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- __also__ ~1>> *
__[i](p_pro_per_obj24)__
    (vous) ({w_2}) @@0,5
    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:A|G|M|2p)") =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- __also__ ~1>> *
__[i](p_pro_per_obj25)__
    (?:à|de) ([nv]ous|lui|les?|en) (?!qui)({w_2}) @@w,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
__[i](p_pro_per_obj26)__
    (s’)({w4}) @@0,2
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- __also__ ~1>> *
__[i](p_pro_per_obj27)__
    (?:je|tu|ils?|elles?|on) (l’|l(?:es?|a|ui|eur) +|[nv]ous +)({w_2}) @@*,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- isStart() ~1>> *
__[i](p_pro_per_obj28)__
    (?:je|tu|ils?|elles?|on|[nv]ous|ce(?:ux|elles?|lui|la|) qui) (l’)({w4}) @@*,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- __also__ ~1>> *
__[i](p_pro_per_obj29)__
    (t’(?:en|y)) ({w_2}) @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- not morph(\2, ":2s", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> *
__[i](p_pro_per_obj30)__
    (t’)({w_2}) @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- not morph(\2, ":2s|>(ils?|elles?|on) ", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> *
__[i>(p_pro_per_obj31)__
    (ne [mtsl]’)({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
__[i>(p_pro_per_obj32)__
    ([mts]e +l’)({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
__[i>(p_pro_per_obj33)__
    [nm]’({w_1})  @@2
    <<- morph(\1, ":(?:[123][sp]|P|Y)", False) =>> select(\1, ":(?:[123][sp]|P|Y)")
    <<- ~>> "  \1"
__[i](p_pro_per_obj34)__
    ([nmts]e +)({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- __also__ ~1>> *
#__<s>(p_pro_per_obj35)__
#    > +>
#    <<- ~>> >
# Fin du Brainfuck



!!
!!
!!!! Confusions                                                                                     
................................................................................
TEST: Il vient {{a}} la maison.
TEST: tu ne donnes rien {{a}} ces hommes.
TEST: Nous les donnons {{a}} ces gens.
TEST: j’arrive {{a}} la gare


#### CONFUSION fasse / face
#__<i]/conf(conf_fasse)__
#    > +(face)(?! à) @@$ <<- -1>> fasse                     # Confusion probable. Pour le subjonctif de “faire”, écrivez “fasse”.

TEST: j’ai peur qu’il ne leur {{face}} quelque chose de mal


#### CONFUSION ÊTRE / AVOIR
__[i]/conf(conf_ait_confiance_été_faim_tort)__
    (?<!’)(est?) +(con(?:fiance|science)|envie|été|p(?:eine|eur)|faim|h(?:âte|onte)|recours|soif|tort)  @@0,$
................................................................................
    <<- morph(\1, ">valoir ", False) and morphex(\2, ":(?:Q|2p)", ":[GM]")
    -2>> =suggVerbInfi(@)                                                                           # Le verbe devrait être à l’infinitif.

TEST: Mieux vaut {{consacré}} son temps à des occupations utiles.


__[i]/infi(infi_à)__
    à +({w_2}(?:ée?s?|ez|ai[st]?))  @@$
    <<- morphex(\1, ":V1", ":[NM]") and not \1.istitle() and not before(r"(?i)\b(?:les|en) +$")
    -1>> =suggVerbInfi(@)                                                                           # Le verbe devrait être à l’infinitif.

TEST: elle parvenait à y {{songez}} souvent
TEST: je vais à Rodez.


__[i]/infi(infi_avoir_beau)__
................................................................................
    <<- morph(\1, ">avoir ", False) and morphex(\2, ":V1", ":N")
    -2>> =suggVerbInfi(@)                                                                           # Le verbe devrait être à l’infinitif.|http://fr.wiktionary.org/wiki/avoir_beau

TEST: Ils ont beau {{consacré}} le plus clair de leur temps à ce projet, ça n’avance guère.


__[i]/infi(infi_par_pour_sans)__
    (?:p(?:a|ou)r|sans) +({w_2}(?:ée?s?|ai[st]?|ez))  @@$
    <<- morphex(\1, ":[Q123][sp]?", ":Y") -1>> =suggVerbInfi(@)                                     # Le verbe devrait être à l’infinitif.

TEST: pour s’y {{donnait}} le plus souvent.



#__[i]/infi__
................................................................................
TEST: Tu ne le lui {{prend}} pas.
TEST: Tu ne m’{{attendra}} pas.
TEST: toi qui n’y {{connait}} rien, ne nous ennuie pas avec tes théories.


## 3sg
__[i]/conj(conj_il)__
    (?<!t’)(il) +({w_1})  @@0,$
    <<- morphex(\2, ":V", ":(?:3s|P|G)") and not (morph(\2, ":[PQ]", False) and morph(word(-1), ":V0.*:3s", False, False))
    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
    <<- __also__ and morph(\2, ":3p", False) -1>> ils        # Accord avec « \2 ».
__[i]/conj(conj_il_pronom)__
    (il) +> +({w_1})  @@0,$
    <<- morphex(\2, ":V", ":(?:3s|P|G)")
    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.
................................................................................
    <<- -1>> =\1[:-1]+"t"                                    # Conjugaison erronée. Accord avec “mieux” : utilisez la 3ᵉ personne du singulier.

TEST: avec toi qui ne sais rien de rien, mieux {{vaux}} ne rien dire.
TEST: Mais là-bas mieux {{valais}} ouvrir sa gueule que se taire.


__[i]/conj(conj_personne_aucun_rien_nul)__
    (personne|aucun|rien|nul(?:le|)) +(?:qui +|)({w_1})  @@0,$
    <<- morphex(\2, ":V", ":(?:3s|P|G)") and morphex(word(-1), ":C", ":(?:Y|P|Q|[123][sp]|R)", True)
    and not( \1.endswith("ien") and before("> +$") and morph(\2, ":Y", False) )
    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1… ». Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: Personne ne {{peux}} me le dire.
TEST: Rien ne {{sers}} de courir
TEST: Rien n’{{arrives}} sans raison
................................................................................
    -2>> =suggVerb(@, ":3s")                                # Conjugaison erronée. Accord avec « \1… ». Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: un des ingénieurs {{vinrent}} nous dire quoi faire.
TEST: une des femmes présente ses résultats.


__[i]/conj(conj_un_une_des_pronom)__
    (une? des {w_2}) +qui +({w_1})  @@0,$
    <<- morphex(\2, ":V", ":(?:3s|P|G)") and morphex(word(-1), ":C", ":(?:Y|P|Q|[123][sp]|R)", True)
    -2>> =suggVerb(@, ":3s")                                 # Conjugaison erronée. Accord avec « \1… ». Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: un des membres présents au conseil {{demandent}} un vote à bulletin secret
TEST: une des femmes de ce conseil ne {{céderaient}} jamais au chantage.
TEST: l’un des chants les plus diffusés pendant la Révolution culturelle

................................................................................
TEST: un paquet de gens futés n’y ont vu que du feu.
TEST: La moitié d’entre elles voient leurs loyers diminuer depuis le début de l’année
TEST: Une partie de ces propositions étaient naïves


## 1pl
__[i]/conj(conj_nous_pronom)__
    ^ *nous +({w1})  @@$
    <<- morphex(\1, ":V", ":(?:1p|3[sp])") and not after("^ +(?:je|tu|ils?|elles?|on|[vn]ous)")
    -1>> =suggVerb(@, ":1p")                                 # Conjugaison erronée. Accord avec « nous ». Le verbe devrait être à la 1ʳᵉ personne du pluriel.
__[i]/conj(conj_nous_qui)__
    ^ *nous +qui +({w1})  @@$
    <<- morphex(\1, ":V", ":[13]p") and not after("^ +(?:je|tu|il|elle|on|[vn]ous)")
    -1>> =suggVerb(@, ":1p")                                 # Conjugaison erronée. Accord avec « nous ». Le verbe devrait être à la 1ʳᵉ personne du pluriel.
__[i]/conj(conj_nous)__
    ^ *nous +(?:qui +|)(\w+ont)  @@$
    <<- morphex(\1, ":V", ":1p") and not after("^ +(?:ils|elles)")
    -1>> =suggVerb(@, ":1p")                                 # Conjugaison erronée. Accord avec « nous ». Le verbe devrait être à la 1ʳᵉ personne du pluriel.

TEST: nous {{donné}} trop de considération
TEST: nous vous {{donnerez}} trop de considération
TEST: nous qui {{somme}} si savants
TEST: nous qui {{mourront}} pour toi.


## 2pl
__[i]/conj(conj_vous_pronom)__
    ^ *vous +({w1})  @@$
    <<- morphex(\1, ":V", ":(?:2p|3[sp])") and not after("^ +(?:je|ils?|elles?|on|[vn]ous)")
    -1>> =suggVerb(@, ":2p")                                 # Conjugaison erronée. Accord avec « vous ». Le verbe devrait être à la 2ᵉ personne du pluriel.
__[i]/conj(conj_vous_qui)__
    ^ *vous +qui +({w1})  @@$
    <<- morphex(\1, ":V", ":2p") and not after("^ +(?:je|ils?|elles?|on|[vn]ous)")
    -1>> =suggVerb(@, ":2p")                                 # Conjugaison erronée. Accord avec « vous ». Le verbe devrait être à la 2ᵉ personne du pluriel.

TEST: vous {{donné}} du bonheur
TEST: vous lui {{donner}} du temps
TEST: vous qui {{avançait}} dans la nuit comme des ombres furtives

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

TEST: {{Ils}} {{vienne}} souvent.
TEST: Ils ne m’{{attends}} pas.
TEST: {{Ils}} vous le {{donne}}.


__[i]/conj(conj_ceux_celles_qui)__
    (ce(?:ux|lles) +qui) +({w_1})  @@0,$
    <<- morphex(\2, ":V", ":(?:3p|P|Q|G)")
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: Ceux qui {{chante}} toute la journée…
TEST: Celles qui {{pense}}.


__[i]/conj(conj_ceux_là_celles_ci_lesquels)__
    (ce(?:ux-(?:ci|là)|lles-(?:ci|là))|lesquel(?:le|)s) (?:qui +|)({w_1})  @@0,$
    <<- morphex(\2, ":V", ":(?:3p|P|Q|G)") and not morph(word(-1), ":[VR]", False, False)
    and not (morph(\2, ":Y", False) and re.search(r"(?i)lesquel", \1) and not re.search(" qui |>", \0))
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: lesquels {{devienne}} des ennuyeux incomparables.
TEST: Mais parmi les millions de causes à défendre, lesquelles choisir ?

................................................................................
TEST: j’ai, tu as, ils ont, elles {{on}}
TEST: Or parmi celles-ci on trouve typiquement d’un côté les structures


# L’accord par syllepse est obligatoire après /la plupart/, ainsi qu’après /nombre/ et /quantité/ employés sans déterminant. L’accord se fait avec le « pseudo-complément ».

__[i]/conj(conj_beaucoup_d_aucuns_la_plupart)__
    (beaucoup|d’aucuns|la plupart) +({w_2})  @@0,$
    <<- morphex(\2, ":V", ":(?:3p|P|Q|G)") and not morph(word(-1), ":[VR]|>de ", False, False)
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.

__[i]/conj(conj_beaucoup_d_aucuns_la_plupart_qui)__
    (beaucoup|d’aucuns|la plupart) +qui +({w_2})  @@0,$
    <<- morphex(\2, ":V", ":(?:3p|P|Q|G)") and not morph(word(-1), ":[VR]", False, False)
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: la plupart des hommes {{vienne}}
TEST: La plupart {{admet}}
TEST: beaucoup {{vienne}}
TEST: d’aucuns {{pense}} que c’est faux
TEST: beaucoup qui ne {{pense}} jamais à rien, mais qui ont quand même des avis sur tout.
TEST: beaucoup entre la peste et le choléra.


__[i]/conj(conj_certains_tous_plusieurs)__
    (?<!de )(certaine?s|tou(?:te|)s|plusieurs) (?:qui +|)({w_2})  @@0,$
    <<- morphex(\2, ":V", ":(?:G|N|A|3p|P|Q)") and not morph(word(-1), ":[VR]", False, False)
    -2>> =suggVerb(@, ":3p")                                # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: certains {{prenne}} leur temps
TEST: Plusieurs qui {{pense}} que c’est une arnaque se sont quand même trompés.


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



#### NOMS PROPRES

# 3sg
__[s]/conj(conj_nom_propre)__
    ([A-ZÉÈ][\w-]+) +({w_1})  @@0,$
    <<- not before(r"\b(?:et |ou |[dD][eu] |ni |[dD]e l’) *$") and morph(\1, ":M", False) and morphex(\2, ":[123][sp]", ":(?:G|3s|3p!|P|M|[AQ].*:[si])")
    and not morph(word(-1), ":[VRD]", False, False) and not before(r"([A-ZÉÈ][\w-]+), +([A-ZÉÈ][\w-]+), +$")
    and not (morph(\2, ":3p", False) and word(-1))
    -2>> =suggVerb(@, ":3s")
    # Conjugaison erronée. Accord avec « \1 ». Le verbe devrait être à la 3ᵉ personne du singulier.

TEST: Marc {{arrives}} demain.
................................................................................
TEST: Les fondateurs pionniers de l’Internet n’avaient pas prévu
TEST: les compteurs Geiger ne détectent pas le polonium
TEST: Des femmes de l’administration Obama y racontent qu’elles ont constaté qu’il leur arrivait régulièrement de ne pas être invitées


# 3pl
__[s]/conj(conj_nom_propre_et_nom_propre)__
    (?<!et |ou |[dD][eu] |ni )([A-ZÉÈ][\w-]+) et ([A-ZÉÈ][\w-]+) +({w_1})  @@0,w,$
    <<- morph(\1, ":M", False) and morph(\2, ":M", False)
    and morphex(\3, ":[123][sp]", ":(?:G|3p|P|Q.*:[pi])") and not morph(word(-1), ":R", False, False)
    -3>> =suggVerb(@, ":3p")
    # Conjugaison erronée. Accord avec « \1 et \2 ». Le verbe devrait être à la 3ᵉ personne du pluriel.

TEST: Samantha et Eva {{viennes}} demain.
TEST: Samantha et Eva leur {{décrive}} une leçon.
................................................................................

#### VERBE AUXILIAIRE

__[i]/conf(conf_avoir_sujet_participe_passé)__
    ({avoir})-(?:je|tu|ils?|elles?|on) +({ppas})  @@0,$
    <<- morph(\1, ">avoir ", False) and morph(\2, ":V.......e_.*:Q", False) -1>> _  # Incohérence. La forme verbale “\2” ne peut pas être utilisé avec l’auxiliaire “avoir”, seulement avec l’auxiliaire “être”.
__[i]/conf(conf_sujet_avoir_participe_passé)__
    (?:j’|je |tu |ils? |elles? |on ) *({avoir}) +({ppas})  @@*,$
    <<- morph(\1, ">avoir ", False) and morph(\2, ":V.......e_.*:Q", False) -1>> _  # Incohérence. La forme verbale “\2” ne peut pas être utilisé avec l’auxiliaire “avoir”, seulement avec l’auxiliaire “être”.

TEST: {{Ait}}-il arrivé à ses fins ?
TEST: je n’{{avais}} pas parti avec eux.
TEST: Avais-je partie liée avec lui ?
TEST: il {{avait}} parti.

................................................................................
!!
!!

# conditionnel / futur

__[i]/vmode(vmode_j_aimerais_vinfi)__
    j(?:e +|’)(aimerai|préf[éè]rerai|apprécierai|voudrai|souhaiterai) +({w_1})  @@w,$
    <<- morphex(\2, ":[YX]|>(?:y|ne|que?) ", ":R") -1>> \1s                                 # Si vous exprimez un souhait, utilisez le conditionnel et non le futur.




TEST: J’{{aimerai}} savoir ce dont il retourne.
TEST: dans tous les cas j’{{aimerai}} ne rien savoir
TEST: Je {{voudrai}} qu’il soit déjà là.
TEST: J’aimerai ces cours-là autant que les autres.
TEST: J’aimerai la danse et la musique, puisque vous l’exigez.





__[i]/vmode(vmode_j_aurais_aimé_que_avoir_être)__
    j’(aurai) +(?:aimé|souhaité|préféré|voulu) +(que?|ne|{infi})  @@2,$
    <<- morph(\2, ":Y|>(?:ne|que?) ", False)
    -1>> aurais|eusse                               # Pour un souhait passé, utilisez le conditionnel passé et non le futur antérieur. Exemple pour le futur antérieur : « quand j’aurai fini… »

TEST: J’{{aurai}} aimé nous offrir ce magnifique cadeau.
TEST: j’{{aurai}} voulu être un artiste.
TEST: j’{{aurai}} préféré ne pas avoir à l’entendre.
TEST: j’{{aurai}} préféré l’entendre un autre jour.
TEST: j’{{aurai}} aimé que vous m’en parliez.
TEST: Quand j’en aurai fini avec eux, vous aurez du mal à les reconnaître.
TEST: Quand j’aurai fini ce boulot, je ne sais pas ce que je ferai.
TEST: Quand j’aurai soif et faim, je m’arrêterai.


# Si suivi du conditionnel ou du subjonctif
__[i]/vmode(vmode_si_sujet1)__
    si +({w1}) +({w_2})  @@w,$
    <<- morph(\1, ":(?:Os|M)", False) and morphex(\2, ":[SK]", ":(?:G|V0|I)") and isStart()
    -2>> _                                                                          # Ce verbe ne devrait être ni au conditionnel, ni au subjonctif.
__[i]/vmode(vmode_si_sujet2)__
    (?:si [jt]’|s’ils? +)({w_2})  @@$
    <<- morphex(\1, ":[SK]", ":(?:G|V0|I)") and isStart()
    -1>> _                                                                          # Ce verbe ne devrait être ni au conditionnel, ni au subjonctif.

TEST: Si Pierre {{avancerait}} sa voiture de quelques mètres, ça nous permettrait de passer.
TEST: s’ils ne {{mangeraient}} pas tous les jours, ils seraient moins gros.


# Dès que + indicatif
__[i]/vmode(vmode_dès_que)__
    dès +que? +({w1}) +({w_2})  @@w,$
    <<- morph(\1, ":(?:Os|M)", False) and morphex(\2, ":S", ":[IG]")    -2>> =suggVerbMode(@, ":I", \1)     # Ce verbe ne devrait pas être au subjonctif.
#    <<- morph(\1, ":(?:Os|M)", False) and morph(\2, ":K", False)        -2>> =suggVerbMode(@, ":If", \1)    # Ce verbe ne devrait pas être au conditionnel.

#TEST: dès que je le {{verrais}}
TEST: dès qu’il le {{voie}}
TEST: donnant à entendre qu’il avait l’intention de violer Laura dès qu’il en aurait l’occasion


# verbe que + subjonctif
__[i]/vmode(vmode_qqch_que_subjonctif1)__
    (afin|pour|quoi|(?:perm|fa|v[oe]|ordonn|exig|désir|dout|suff|préf[éè]r)\w+) +que? +({w1}) +({w_2})  @@0,w,$
    <<- morph(\1, ">(?:afin|pour|quoi|permettre|falloir|vouloir|ordonner|exiger|désirer|douter|préférer|suffire) ", False)
    and morph(\2, ":(?:Os|M)", False) and morphex(\3, ":I", ":[GYS]")
    and not (morph(\1, ">douter ", False) and morph(\3, ":(?:If|K)", False))
    -3>> =suggVerbMode(@, ":S", \2)                                                 # Ce verbe devrait être au subjonctif.

TEST: Il suffit qu’il {{court}} plus
TEST: Je veux qu’il {{finit}} son repas.
................................................................................
TEST: Je ne doute pas qu’ils réussiront leur mission.
TEST: Je me doutais bien qu’Apple pourrait marcher
TEST: il ne fait aucun doute qu’Amazon le sait.
TEST: quoi que nous autres hommes ayons pu faire


__[i]/vmode(vmode_qqch_que_subjonctif2)__
    (?:à condition|pour peu|il +peut) +que? +({w1}) +({w_2})  @@w,$
    <<- morph(\1, ":(?:Os|M)", False) and morphex(\2, ":", ":[GYS]") -2>> =suggVerbMode(@, ":S", \1)    # Ce verbe devrait être au subjonctif.

TEST: à condition qu’il {{finit}} son boulot.
TEST: pour peu qu’il {{prend}} son devoir sérieux… 
TEST: il se peut que nous {{avons}} tort.


# indicatif nécessaire
__[i]/vmode(vmode_sujet_indicatif)__
    ^ *(je|j’(?:en|y)|tu|ils?|elles?|on|nous|vous) +({w_2})  @@*,$
    <<- morphex(\2, ":S", ":[GIK]") and not re.search("^e(?:usse|û[mt]es|ût)", \2) 
    -2>> =suggVerbMode(@, ":I", \1)                                                                 # Ce verbe ne devrait pas être au subjonctif.
__[i]/vmode(vmode_j_indicatif)__
    ^ *j’({w_2})  @@$
    <<- morphex(\1, ":S", ":[GIK]") and \1 != "eusse" -1>> =suggVerbMode(@, ":I", "je")             # Ce verbe ne devrait pas être au subjonctif.

TEST: Il {{ait}} parti.
................................................................................
TEST: Il en {{conclue}} qu’il a eu raison.
TEST: j’en {{aie}} marre
TEST: j’{{aie}} faim


# Après que + indicatif
__[i]/vmode(vmode_après_que_indicatif)__
    après que? ({w_2}) +({w_2})  @@w,$
    <<- morph(\1, ":(?:Os|M)", False) and (morph(\2, ":V.*:S") or morph(\2, ":V0e.*:S", False))
    -2>> =suggVerbMode(@, ":I", \1)
    # Après « après que », le verbe s’emploie pas au subjonctif mais à l’indicatif, si l’action s’est déroulée de façon certaine.

TEST: Après qu’il {{ait}} allé
TEST: Après que Paul {{ait}} mangé son repas.
TEST: Après qu’il {{soit}} parti, il plut.